Mui*_*uis 10 linker gcc arm compiler-optimization
当我在GCC中启用链接时间优化时,生成的二进制文件变得更大.我希望GCC能够删除大量的reduntant函数,并执行其他不可能的优化,那么为什么生成的输出会增长?
编译器标志:
-Os -c -fno-builtin -ffunction-sections -fdata-sections -flto -mcpu=cortex-m0 -mthumb
Run Code Online (Sandbox Code Playgroud)
链接器标志:
-nostdlib -s -Xlinker --gc-sections -flto -mcpu=cortex-m0 -mthumb -T
Run Code Online (Sandbox Code Playgroud)
Bas*_*tch 16
在链接后是否删除了二进制文件-flto
(它应该在编译时和链接时提供)?
顺便说一句,注意的是 在相同的优化标志(-flto -Os
)应当通过双方在编译时和链接时.如果你忘了 - 就像你在连接阶段做了任何一个,LTO将无法工作!(当使用make
你想CC=gcc -flto -Os
不CFLAGS= -flto -Os
).
你没忘了-Os
在链接时,在另外的-flto
; 只是-flto
在没有任何优化的情况下在链接时间传递是错误的:LTO阶段最多会"去优化"
我知道-flto
在ELF目标文件和可执行文件中添加了很多部分(这些部分包含GCC内部表示的序列化,如Gimple ....).我猜(但尚未检查)链接不会删除它们.
另外,LTO的要点是内联翻过几个编译单元,这有望增长的代码.所以也许你不应该在你的特定情况下使用LTO.
即使没有LTO,大多数冗余功能也已被删除(通过部分链接器"GC").
顺便说一句,你可以使用objdump
或readelf
找出答案.
归档时间: |
|
查看次数: |
5977 次 |
最近记录: |