c - 我的 BSS 部分的大小是否达到临界值?

标签 c arm

我为我公寓的供暖系统编写了一个小应用程序,在编译结束时我将得到以下输出:

 'Invoking: Cross ARM GNU Print Size'
arm-none-eabi-size --format=berkeley "Phaethon_F446.elf"
text       data     bss     dec     hex filename
142935      924   77140  220999   35f47 Phaethon_F446.elf

我使用的是具有 128 KB RAM 的 STM32F446RE,如果我正确的话,bss 部分需要 75KB RAM;这意味着超过 50% 的 RAM 消失了。

  • 我错了吗?
  • 杀死我的 RAM 或者编译器表示的这个值是错误的?

  • 我应该对软件进行哪些更改?

最佳答案

是的,你是对的,根据报告,大约 50% 的 RAM 被 .bss 占用。可以肯定的是,您可以生成映射文件来找出变量的分配方式(或位置)(-Wl,-Map=output.map)。

关于解决方案,您必须优化软件(是否需要所有变量?您是否使用编译器优化作为 -O3/... options ?您可以重复使用变量吗?)我不知道您的代码/算法/等,但看起来仅仅用于加热系统就需要很多字节。

链接器脚本将向您显示 .bss 部分的边框(即当前大小)(以及您的内存如何分割),以防万一您想要修改它(您可以选择内存的分配方式) )。

关于c - 我的 BSS 部分的大小是否达到临界值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50856263/

相关文章:

c - 枚举无法理解内存和功能

assembly - 了解 ARM7 上的 MRC

linux - 如何使用 gdbserver 进行远程调试?

c - ARM ITE指令在这种情况下有什么用吗

debugging - 有哪些可用的可执行二进制格式和模拟器?

c - 针对没有源代码的 .so 文件的 GCC 链接

c - 为什么这段代码会有输出?

c - 使用链接时替换在单元测试中为结构体创建测试替身

C : request for member ‘____’ in something not a structure or union 中的编译错误

c++ - 具有可扩展 vector 扩展 (SVE) 的 ARM V-8