0

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

#include<stdio.h>

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

并针对所有级别进行了测试。它给了我如下尺寸

O0 - 4883
O1 - 4883
O2 - 4867
O3 -4867
Os - 4879

它应该在级别 Os 中给出最小的大小。但它没有这样做。如果我错了,谁能告诉我。谢谢

4

1 回答 1

5

将优化级别视为编译器的指导风格,它们永远不会保证最小或最快的可执行文件,但会以最适合您目标优化级别的方式构建代码。

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

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

于 2013-07-16T11:28:50.293 回答