>>Насколько оправдано использование registred int по сравнению с auto int? Действительно это
>>влияет на что-то, не остались ли это отзвуки прошлого?
>
>Насколько я помню, gcc вообще игнорирует register. И любой другой компилятор
>тоже имеет полное на это право, по стандарту. Нет, Вы не правы:
1 #include <stdio.h>
2
3 int main()
4 {
5 int a=5;
6 }
дамп такой:
1 not register
2 Dump of assembler code for function main:
3 0x08048384 <main+0>: push %ebp
4 0x08048385 <main+1>: mov %esp,%ebp
5 0x08048387 <main+3>: sub $0x8,%esp
6 0x0804838a <main+6>: and $0xfffffff0,%esp
7 0x0804838d <main+9>: mov $0x0,%eax
8 0x08048392 <main+14>: sub %eax,%esp
9
10 0x08048394 <main+16>: movl $0x5,0xfffffffc(%ebp)
11 0x0804839b <main+23>: mov $0x0,%eax
12 0x080483a0 <main+28>: leave
13 0x080483a1 <main+29>: ret
14 0x080483a2 <main+30>: nop
15 0x080483a3 <main+31>: nop
16 0x080483a4 <main+32>: nop
17 0x080483a5 <main+33>: nop
18 0x080483a6 <main+34>: nop
19 0x080483a7 <main+35>: nop
20 0x080483a8 <main+36>: nop
21 0x080483a9 <main+37>: nop
22 0x080483aa <main+38>: nop
23 0x080483ab <main+39>: nop
24 0x080483ac <main+40>: nop
25 0x080483ad <main+41>: nop
26 0x080483ae <main+42>: nop
27 0x080483af <main+43>: nop
28 End of assembler dump.
1 #include <stdio.h>
2
3 int main()
4 {
5 int a=5;
6 }
дамп:
1 register
2 Dump of assembler code for function main:
3 0x08048384 <main+0>: push %ebp
4 0x08048385 <main+1>: mov %esp,%ebp
5 0x08048387 <main+3>: sub $0x8,%esp
6 0x0804838a <main+6>: and $0xfffffff0,%esp
7 0x0804838d <main+9>: mov $0x0,%eax
8 0x08048392 <main+14>: sub %eax,%esp
9
10 0x08048394 <main+16>: mov $0x0,%eax
11 0x08048399 <main+21>: leave
12 0x0804839a <main+22>: ret
13 0x0804839b <main+23>: nop
14 0x0804839c <main+24>: nop
15 0x0804839d <main+25>: nop
16 0x0804839e <main+26>: nop
17 0x0804839f <main+27>: nop
18 End of assembler dump.
Соответственно, эксперимент:
1 #include <stdio.h>
2
3 int main()
4 {
5 int a=5;
6 for (a=0; a<1000000000; a++)
7 {
8 __asm__("nop");
9 }
10 }
time ./a.out
real 0m4.668s
user 0m4.162s
sys 0m0.013s
1 #include <stdio.h>
2
3 int main()
4 {
5 register int a=5;
6 for (a=0; a<1000000000; a++)
7 {
8 __asm__("nop");
9 }
10 }
time ./a.out
real 0m3.885s
user 0m3.571s
sys 0m0.025s
Получаем разницу 18%
gcc version 3.3.6