我一直在查看一些简单的 C 代码以及使用不同优化级别的 GCC 的不同输出。
C代码
#include <stdio.h>
int main() {
int i = 0;
while(i<10) {
printf("Hello\n");
i++;
}
i = 0;
while(i<10) {
printf("i: %d\n", i);
i++;
}
}
当我使用-Os
or编译代码时-O2
,第一个循环的工作方式略有不同。它是减少而不是增加,它有两种不同的方式。我想知道为什么它递减的,而不是在代码中增加等,之间的差异小-Os
和-O2
。
-Os 编译
0x400486 <main+6> mov edi,0x40068c
0x40048b <main+11> call 0x400450 <puts@plt>
0x400490 <main+16> dec ebx
0x400492 <main+18> jne 0x400486 <main+6>
-O2 编译
0x400490 <main+16> mov edi,0x40069c
0x400495 <main+21> call 0x400450 <puts@plt>
0x40049a <main+26> sub ebx,0x1
0x40049d <main+29> jne 0x400490 <main+16>