【发布时间】:2015-11-20 21:00:23
【问题描述】:
当我在编译后检查内存映射时,我可以看到 DATA 或 BSS 部分中的符号没有以优化的方式排序,它们的大小和 CPU 对齐访问限制。
例如,我最终得到的结果是:
address size name
0x1000 1 var_a
0x1004 4 var_b
0x1008 1 var_c
0x100a 2 var_d
0x100c 4 var_e
0x1010 1 var_f
0x1014 4 var_g
0x1018 0 end
而不是得到:
0x1000 4 var_b
0x1004 4 var_e
0x1008 4 var_g
0x100c 2 var_d
0x100e 1 var_a
0x100f 1 var_c
0x1010 1 var_f
0x1011 0 end
然而,我可以看到所有符号都被混淆了,并且与它们在源代码或编译过程中的顺序无关。
我正在使用选项-Os-flto-flto-fuse-linker-plugin-flto-report-flto-compression-level=9。 ARM 的 GCC 是 arm-none-eabi-gcc v4.8.3,来自 https://launchpad.net/gcc-arm-embedded,ld 是 v2.23.2。
ld 不进行此优化是否有任何相关原因?如何重新排序符号以提高内存使用率?
【问题讨论】:
标签: gcc linker arm ld compiler-optimization