GCC中的优化级别用于减少可执行文件大小

Ary*_*rya 0 c gcc compiler-optimization

我正在通过gcc学习优化.从优化级别可以看出,在级别Os中,gcc特别选择了减少可执行文件大小所需的优化.我写了简单的程序.

#include<stdio.h>

int main()
{
    const int k=7;
    printf("k = %d\n",k);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并测试了所有级别.它给我的大小如下

O0 - 4883
O1 - 4883
O2 - 4867
O3 -4867
Os - 4879
Run Code Online (Sandbox Code Playgroud)

它应该给出Os级别的最小尺寸.但事实并非如此.任何人都可以告诉我,如果我错了.谢谢

Mat*_*ttP 5

将优化级别视为编译器的指南样式,它们永远不会保证最小或最快的可执行文件,但会以最适合您所针对的优化级别的方式构建代码.

0s不会测试所有级别然后选择最小的可执行文件,它将使用倾向于更小的可执行文件大小的规则来构建,而不是例如更快的执行.

在程序中添加一些循环,以便为编译器提供更多选项,然后您可能会开始看到一些更重要的差异.如果您真的想了解优化级别的差异,那么开始反汇编可执行文件,看看编译器生成的汇编代码并比较各种样式.