Компилятор GCC
$ gcc --version
gcc (GCC) 4.8.2
...
не генерирует inc
ассемблерную инструкцию, где она может быть полезна, как в этой программе на C:
int main(int argc, char **argv)
{
int sum = 0;
int i;
for(i = 0; i < 1000000000L; i++) <---- that "i++"
sum += i;
return sum;
}
Вместо этого он генерирует инструкцию add
:
0000000000000000 <main>:
0: 31 d2 xor %edx,%edx
2: 31 c0 xor %eax,%eax
4: 0f 1f 40 00 nopl 0x0(%rax)
8: 01 d0 add %edx,%eax
a: 83 c2 01 add $0x1,%edx <---- HERE
d: 81 fa 00 ca 9a 3b cmp $0x3b9aca00,%edx
13: 75 f3 jne 8 <main+0x8>
15: f3 c3 repz retq
Почему это происходит?
EDIT: я использовал gcc -O2
для компиляции. gcc -Os
действительно генерирует инструкцию inc
. Разве использование inc
не является скорее оптимизацией скорости, чем оптимизацией пространства?
gcc -Os
? Проблема в том, что вариантыadd
, вероятно, быстрее в сообщении +386, аinc
все равно будет внутренне переведено наadd
. - person Aki Suihkonen   schedule 10.11.2013