|
•Отв: Коменты - Artlav, 03.06.2010 19:55:41 |
|
|
##а ещё и отсутствие коментов Это да. Каюсь, писать в коменты ничего не очевидного в голову не приходит.
##Я бы вообще предпочёл объекты В объектах было бы тоже самое, только неявно.
##Отличие в том, что на один уровень меньше обращений. Менее понятно, что есть что и к чему относится ценой мизерного прироста производительности? Процессору одну двойную адресацию взять не трудно.
##Это оптимизация. Ой ли?
Вот пример программы:
type alpharec=record a,b,c:integer; end;
var ga,gb,gc:integer; x:alpharec;
procedure n1; begin x.a:=1; x.b:=(x.a+4)*10; x.c:=x.a-x.b; writeln(x.c); end;
procedure n2; begin ga:=1; gb:=(ga+4)*10; gc:=ga-gb; writeln(gc); end;
begin n1; n2; end.
Вот во что оно компилируется с -O3:
P$PROGRAM_N1: subl $4,%esp movl %ebx,(%esp) # [11] x.a:=1; movl $1,%eax # [12] x.b:=(x.a+4)*10; movl %eax,U_P$PROGRAM_X addl $4,%eax imull $10,%eax movl %eax,U_P$PROGRAM_X+4 # [13] x.c:=x.a-x.b; movl U_P$PROGRAM_X,%edx movl U_P$PROGRAM_X+4,%eax subl %eax,%edx movl %edx,U_P$PROGRAM_X+8 # [14] writeln(x.c); call fpc_get_output movl %eax,%ebx movl U_P$PROGRAM_X+8,%ecx movl %ebx,%edx movl $0,%eax call fpc_write_text_sint call FPC_IOCHECK movl %ebx,%eax call fpc_writeln_end call FPC_IOCHECK # [15] end; movl (%esp),%ebx addl $4,%esp ret
P$PROGRAM_N2: subl $4,%esp movl %ebx,(%esp) # [19] ga:=1; movl $1,%eax # [20] gb:=(ga+4)*10; movl %eax,U_P$PROGRAM_GA addl $4,%eax imull $10,%eax movl %eax,U_P$PROGRAM_GB # [21] gc:=ga-gb; movl U_P$PROGRAM_GA,%edx movl U_P$PROGRAM_GB,%eax subl %eax,%edx movl %edx,U_P$PROGRAM_GC # [22] writeln(gc); call fpc_get_output movl %eax,%ebx movl U_P$PROGRAM_GC,%ecx movl %ebx,%edx movl $0,%eax call fpc_write_text_sint call FPC_IOCHECK movl %ebx,%eax call fpc_writeln_end call FPC_IOCHECK # [23] end; movl (%esp),%ebx addl $4,%esp ret
Не трудно заметить, что отличие - в типе адресации нескольких команд, дающее разницу в один такт на штуку. Что пренебрежимо мало по сравнению с потерей удобства.
Итого, плодить шорткатные глобальные переменные смысла всё ещё не вижу.
|
|
| |