提问人:Marcell Juhász 提问时间:10/26/2022 更新时间:10/26/2022 访问量:153
STM32 二进制大小突然增加
STM32 sudden binary size increase
问:
我目前正在尝试嵌入式 C++ 编程,我正在尝试理解 ST 提供的 C HAL,在现代 C++ 中对其进行返工,优化一些东西等。
我到了可以闪烁 LED 的地步。我当前二进制文件的大小是 1800 字节,但在此过程中,由于非常小的变化,我的二进制文件大小不止一次显着增长。重要意味着我得到了一个 6144 字节的二进制文件,而不是我的 1800 字节二进制文件,这增加了 3 倍多。我的目标当然是保持二进制大小较小。
每次发生这种情况时,我都会查看反汇编的 elf 文件,我注意到编译器包含某种堆栈展开的东西,这就是导致二进制文件大小增加的原因。在反汇编的文件中,我可以看到像 、 、 、 等符号。__gnu_unwind_get_pr_addr
__gnu_Unwind_Restore_VFP
_Unwind_DebugHook
__gnu_Unwind_RaiseException
第一次发生这种情况时,我使用了一些阴暗的指针,所以我可以理解,因此可能会发生一些异常,然后需要这个堆栈展开的东西。上次我复制了一个函数,但忘记删除属性。尽管我发现这是导致它的原因,但我并没有真正看到问题所在,我认为如果我不实现强函数,那么弱函数将毫无问题地使用。__attribute__((weak))
问题:添加到二进制文件中的这种展开的东西到底是什么,它的目的是什么,一般来说是什么原因造成的?
我的假设是,如果我编写的代码可能会导致异常发生,那么堆栈展开是异常机制的必要组成部分,因此这就是添加此额外代码的原因。但我只是在这里猜测,很难在网上找到任何关于这个的信息。
答: 暂无答案
评论
try/throw/catch
-fno-exceptions