arm-none-eabi-gcc 工具链自带的 libstdc++ 库会将 throw 的异常对象创建在堆上

我通过重载全局的 new 运算符和重写 malloc 函数,将堆放在 stm32h743 的 FMC 的 SDRAM 区域,即 0xC0000000 起始的 256MiB 大小的区域。

通过下面的测试代码抛出异常,捕获到异常后,取得异常对象的地址,然后转为 16 进制字符串打印出来。一同打印的还有代码位置信息。

cpp 复制代码
try
{
	throw std::runtime_error{"测试异常"};
}
catch (std::exception const &e)
{
	base::console().WriteLine(CODE_POS_STR + base::ToHexString(&e));
}

输出如下

打印出来的地址是 0xc000d560 。这说明异常对象被创建在堆上了。

相关推荐
隔窗听雨眠1 天前
ARM架构下Logstash与Elasticsearch集群部署完全指南:从环境适配到生产验证
arm开发·elasticsearch·架构
郭老师-嵌入式1 天前
arm linux 移植 udhcp 与 使用
linux·服务器·arm开发
深念Y2 天前
登录日志与管理员审计日志存储决策
前端·arm开发·后端·微服务·云原生·架构
深念Y2 天前
微服务抽取路线图:从胖单体到 ARM 集群
前端·arm开发·数据库·后端·微服务·云原生·架构
亿道电子Emdoor3 天前
【Arm】如何高效实现2兆字节对齐
arm开发·单片机·mcu
姓刘的哦3 天前
STM32的启动流分析
linux·运维·arm开发
zlinear数据采集卡3 天前
FRAM铁电存储器原理深度解析:D223校准参数的“永久保险箱“
arm开发·人工智能·stm32·单片机·fpga开发·开源
喜欢吃燃面4 天前
Linux网络编程深度解析:从Socket API到自定义协议设计
linux·网络·arm开发
rcms152702692184 天前
DS200ADCIH1ADB 输入 / 输出板
arm开发
又见情义4 天前
RK3568 Android 13 移植 EC20-CE 4G 模块全记录
android·arm开发·驱动开发