gpt4 book ai didi

c++ - 相同的源代码,不同的可执行文件大小?

转载 作者:行者123 更新时间:2023-11-28 04:01:41 26 4
gpt4 key购买 nike

在 AIX 中,不同版本的编译器是否会使可执行文件(或库)的大小不同?

问题

什么会影响可执行文件/库的大小?

  • 不同版本的编译器。
  • 不同的编译选项。
  • 不同的操作系统版本及其库(如 libm.a、libpthread.a ..)。
  • 更多?

一些背景。

在这里,我们有一堆旧的可执行文件和库,它们不是受版本控制的源代码。我们需要弄清楚可执行文件是从我们拥有的源代码构建的。所以我们再次构建它,但是结果(exec,libs)的大小不一样。

尝试..

我试过了..

  • dump -X64 -c : 它显示了构建它时使用的编译器的一些信息。二进制文件的编译器版本是“IBM XL C/C++ .. 11.1.0.14”。但是我们拥有的编译器版本是“IBM .. 11.1.0.13”。这些能有所作为吗?
  • ar -X64 -x :比较从存档中提取的文件。当我“制作”一些库时,生成了目标文件(*.o)。大多数文件的大小相同,但有些文件不相同。转储它们(具有不同大小的文件)时,编译器不相同。

任何帮助、建议和链接都会有所帮助。谢谢。

最佳答案

What can affects on size of executable/libraries?

Different version of compiler.

当然!它可以生成非常不同的二进制文件,不仅大小不同。它从不同位置的代码开始,并且针对相同的源进行完全不同的汇编。

Different compile options.

它必须改变尺寸!如果您针对大小或速度进行优化,结果一定会有所不同。考虑循环展开...

Different os version and its libraries(like libm.a, libpthread.a ..).

因为它们也是用不同的编译器编译的,所以答案是递归的:-)

More?

也许是一个无穷无尽的 list ?链接时的文件排序,不同的链接器选项,...

我的提示:

可执行文件的大小只是第一次检查。您可以拥有相同大小的不同可执行文件,非常清楚。

即使您使用相同的编译器和相同的库并运行相同的操作系统,您也需要使用相同的构建脚本/make 来构建以获得相同的结果。如果有任何不同( compiler/libs/compiler 和/或链接器标志、文件顺序不同,则您链接的可执行文件不同!

简而言之:如果您不能为您的构建复制环境的精确拷贝,您将永远不会看到相同的可执行文件,即使源是相同的!

关于c++ - 相同的源代码,不同的可执行文件大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59422760/

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