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 。这说明异常对象被创建在堆上了。

相关推荐
ShiMetaPi2 小时前
GM-3568JHF丨ARM+FPGA异构开发板应用开发教程:10 以太网测试案例
网络·arm开发·fpga开发·rk3568
『往事』&白驹过隙;3 小时前
Linux VFS虚拟文件系统杂谈
linux·c语言·arm开发·物联网·操作系统·iot
切糕师学AI1 天前
ARM标准汇编(armasm)中的“定义”(Assembler Directive)
汇编·arm开发
嵌入式×边缘AI:打怪升级日志1 天前
ARM Cortex-M 单片机启动流程与向量表深度解析(保姆级复习笔记)
arm开发·笔记·单片机
济6171 天前
ARM Linux 驱动开发篇---Linux 设备树(DTS)语法-- Ubuntu20.04
arm开发·嵌入式linux驱动开发
济6171 天前
ARM Linux 驱动开发篇---Linux 设备树简介-- Ubuntu20.04
linux·arm开发·嵌入式linux驱动开发
CHENG-JustDoIt2 天前
嵌入式开发 | ARM Cortex-M 系列中M3、M4、M23 和 M33四款处理器的深度对比分析
arm开发·单片机·嵌入式硬件·arm
invicinble2 天前
对于linux形成整体性的认识
linux·运维·arm开发
『往事』&白驹过隙;2 天前
在ARM开发中 volatile与const关键字的关键用途
c语言·arm开发·mcu·物联网·学习·iot