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

相关推荐
想要成为计算机高手4 小时前
研究 telegrip - SO100 Robot Arm Teleoperation System
arm开发·机器人·开源·具身智能·摇操·telegrip
编码如写诗4 小时前
【k8s】arm架构从零开始在线/离线部署k8s1.34.5+KubeSphere3.4.1
arm开发·架构·kubernetes
EVERSPIN5 小时前
BLE蓝牙水表蓝牙芯片方案
arm开发·蓝牙芯片·蓝牙芯片方案
银河麒麟操作系统7 小时前
银河麒麟桌面操作系统V10SP1(全X86/ARM架构)【进程资源限制与性能优化实践】技术文章
arm开发·性能优化·架构
左手の明天13 小时前
Linux内核裁剪深入浅出:从原理到实操,打造轻量化嵌入式内核
linux·arm开发·c++
路溪非溪15 小时前
wpa_supplicant核心操作总结
linux·网络·arm开发·驱动开发
忆和熙16 小时前
ARM处理器指令系统——ARM指令的寻址方式(上,数据处理指令的寻址方式、Load/Store 寻址方式总览)
arm开发·arm指令寻址方式
忆和熙16 小时前
ARM处理器指令系统——ARM指令的寻址方式(下,Load/Store寻址方式、AArch32/64中Load/Store寻址方式的区别)
arm开发·arm指令寻址方式
Flamingˢ16 小时前
基于ARM的裸机程序设计和开发(二):使用Vivado创建PS应用系统
arm开发
猫猫的小茶馆1 天前
【Linux 驱动开发】Linux 内核启动过程详解
linux·c语言·arm开发·驱动开发·stm32·单片机·mcu