【发布时间】:2020-05-16 06:55:18
【问题描述】:
我一直在使用arm-linux-gnueabi-gcc 工具链将二进制文件交叉编译为arm。奇怪的是,尽管我更改了优化级别,但编译的二进制文件没有任何差异。甚至我也在关注来自“arm”的this 文档,并从中获取了相同的来源。
#include <stdio.h>
int main(){
int x =10, y =20;
int z;
z =x+y;
return 0;
}
我什至浏览了man 页面,我认为我正确使用了优化标志。这是我用来编译的确切代码。
arm-linux-gnueabi-gcc -O1 -o test test.c
但是,无论我如何更改上述 arm 文档中所示的优化级别,“测试”目标文件的生成都不会改变(编译后的二进制文件的大小是相同的)。可能是什么原因?我在这里做错了吗?提前致谢。
【问题讨论】:
-
The size of the compiled binary is the same- 你是如何测量尺寸的?你为什么希望它改变? -
我使用
ls -al来获取大小。根据我正在阅读的arm文档,随着优化级别的提高,大小确实会发生变化。但在我的情况下,即使在最高优化级别也没有改变,无论在 arm 文档中使用相同的源代码 -
您是否使用 objdump 检查了您的两个二进制文件?也许
text部分包含很多填充? -
According to the arm documentation- 什么文档?您确定他们提到的是 文件 的大小,而不是 .bss 部分的大小或其他任何内容吗?优化选项可能会增加可执行文件的大小,因为编译器可能会牺牲大小来换取速度。你不能做出“它总是会更小”这样的假设。编译器可能会插入填充nop指令以将您的指令与某个边界对齐。
标签: gcc arm cross-compiling compiler-optimization