[STM32L4] 用优化级别 -0s 构建代码,内存大小也没有变化

[复制链接]
605|16
Hitomi22 发表于 2025-9-20 21:36 | 显示全部楼层 |阅读模式
在 Stm32L432xx 的内存问题,因此尝试将优化级别从 -01 提高到 -0s。即使使用优化级别 -0s 构建代码,内存大小也没有变化,只是在 .text 和 .data 段之间进行了调整。
但观察到并没有变化,只是减少了 .text 段的大小... 却增加了 .data 段的大小。最终总内存值相同,问题仍然存在。

优化前(即 -01 级别)的情况:
text    data     bss     dec     hex filename
  117760        11264        30064        159088        26d70      build/app-firmware.elf
优化后(即 -0 级别)的情况:
text    data     bss     dec     hex filename
117480         11544         30064        159088         26d70 build/app-firmware.elf

公羊子丹 发表于 2025-9-21 07:13 | 显示全部楼层
可能是函数被强行内联或者常量折叠方式不同,才导致 text 和 data 在段之间移动,总大小不变。
周半梅 发表于 2025-9-21 07:14 | 显示全部楼层
-Os 的目标是减小代码体积,不一定会减少总内存占用,尤其是 data 段里存放了初始化数据。
帛灿灿 发表于 2025-9-21 07:15 | 显示全部楼层
STM32L4 这种 flash + ram 分开的架构,编译优化更多影响 flash 占用,不会影响到 bss。
童雨竹 发表于 2025-9-21 07:16 | 显示全部楼层
看你给的数据,bss 段完全没变化,说明变量的数量和大小根本没变。
万图 发表于 2025-9-21 07:17 | 显示全部楼层
有些时候编译器会把常量放进 data,而不是 text,导致表面看起来只是段分布调整。
Wordsworth 发表于 2025-9-21 07:17 | 显示全部楼层
试试 -flto(链接时优化),有时会进一步精简没用到的函数。
Bblythe 发表于 2025-9-21 07:19 | 显示全部楼层
如果你想真正降低 RAM 占用,重点是减少全局变量和大数组,不靠优化器。
Pulitzer 发表于 2025-9-21 07:19 | 显示全部楼层
可以用 arm-none-eabi-size 对比多个优化级别,看增减趋势更清楚。
Uriah 发表于 2025-9-21 07:20 | 显示全部楼层
还有一种可能是库函数没被裁剪,建议加 --gc-sections。
Clyde011 发表于 2025-9-21 07:24 | 显示全部楼层
你现在的问题更像是内存模型问题,而不是优化等级能解决的,需要代码级调整。
onlycook 发表于 2025-9-25 16:57 | 显示全部楼层
默认链接脚本可能未正确分配段,导致优化后数据布局不合理。
powerantone 发表于 2025-9-25 17:58 | 显示全部楼层
链接脚本未适配优化
probedog 发表于 2025-9-25 18:58 | 显示全部楼层
强制常量数据进入Flash,用__attribute__((section(".rodata")))显式指定段。
stormwind123 发表于 2025-9-25 19:59 | 显示全部楼层
调整链接脚本,显式控制段分配顺序,避免碎片化。
七毛钱 发表于 2025-9-25 20:00 | 显示全部楼层
用-fdata-sections和--gc-sections,让链接器删除未使用的段,减少冗余数据。
内政奇才 发表于 2025-9-25 21:01 | 显示全部楼层
-Os优化未减少总内存的原因是编译器将部分只读数据错误地放入了.data段。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

59

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部