1

在制作 bin 文件时,是否会为 gnu 编译器中未使用的变量和函数分配空间。

4

2 回答 2

0

要看。例如在优化级别上。

如果您想确定二进制文件中是否显示了某些内容,请使用__attribute__((used)).

附加到函数的此属性意味着即使看起来未引用该函数,也必须为该函数发出代码。例如,当仅在内联汇编中引用该函数时,这很有用。当应用于 C++ 类模板的成员函数时,该属性还意味着如果类本身被实例化,则该函数被实例化。

源代码。如果您有与依赖于某些符号存在的二进制文件关联的动态链接库,则非常有用。

如果您想确保未使用的东西不会出现在您的二进制文件中,请使用调试符号对其进行编译并检查它是否不会出现。为了确保优化掉未使用的局部变量,我知道没有比单步执行反汇编编译二进制文件更好的方法了。

于 2013-03-26T12:22:14.987 回答
0

GCC 会将全局变量和所有外部函数放入目标代码中,无论是否使用。但是,未初始化的数据通常不占用空间。

自动变量是在运行时分配的,因此它们不会存储在二进制文件中。

您可以要求链接器删除代码,例如,使用 GNU ld:

gcc -o foo foo.c -Wl,--gc-sections

这可能会从最终代码中删除未使用的变量和函数。

于 2013-03-26T12:54:53.413 回答