gpt4 book ai didi

gcc - 为什么 'Link Time Optimization' 会产生更大的二进制文件?

转载 作者:行者123 更新时间:2023-12-04 03:15:36 25 4
gpt4 key购买 nike

当我在 GCC 中启用链接时间优化时,生成的二进制文件变得更大。我希望 GCC 能够去除很多冗余函数,并执行其他不可能的优化,那么为什么这会使生成的输出增长?

编译器标志:

-Os -c -fno-builtin -ffunction-sections -fdata-sections -flto -mcpu=cortex-m0 -mthumb 

链接器标志:
-nostdlib -s -Xlinker --gc-sections -flto -mcpu=cortex-m0 -mthumb -T

最佳答案

您是否在与 -flto 链接后剥离了二进制文件? (它应该在编译和链接时提供)?

顺便说一句,通知 that 应该在编译时和链接时传递相同的优化标志 ( -flto -Os )。 如果您在链接阶段忘记了 - 就像您所做的那样 - 他们中的任何一个,LTO 将无法工作! (当使用 make 你想要 CC=gcc -flto -Os 而不是 CFLAGS= -flto -Os )。

你确实忘记了 -Os在链接时,除了 -flto ;刚刚路过-flto在链接时没有任何优化是错误的:LTO 阶段最多会“去优化”

我知道-flto在 ELF 目标文件和可执行文件中添加了很多部分(这些部分包含 GCC 内部表示的序列化,如 Gimple....)。我猜(但尚未检查)链接不会删除它们。

此外,LTO 的主要目的是跨多个编译单元内联,这预计会增加代码。所以也许你不应该在你的特定情况下使用 LTO。

即使没有 LTO,大多数冗余功能也已被删除(通过节上的链接器“GC”)。

顺便说一句,你可以使用 objdumpreadelf找出答案。

关于gcc - 为什么 'Link Time Optimization' 会产生更大的二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24718652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com