Разница в производительности function и procedure

Рейтинг: 5Ответов: 1Опубликовано: 20.01.2011

Чем отличается

function some(i:integer):integer;
 begin
   some:=i;
 end;

от

procedure some(i:integer;var j:integer);
 begin
   j:=i;
 end;

Предположительно, ничем.

Может, кто-то уже делал тесты, или просто знает?

Ответы

▲ 4Принят
_FSOME$$INTEGER:
      push  ebp
      mov   ebp, esp
      sub   esp, 4
      mov   eax, dword [ebp + 8]
      mov   dword [ebp - 4], eax
L1:
      mov   eax, dword [ebp - 4]
      mov   esp, ebp
      pop   ebp
      ret   4

_PSOME$$INTEGER$INTEGER:
      push  ebp
      mov   ebp, esp
      mov   eax, dword [ebp + 12]
      mov   edx, dword [ebp + 8]
      mov   dword [eax], edx
L2:
      mov   esp, ebp
      pop   ebp
      ret   8

_main:
      mov   dword [_A], 5
      push  dword [_A]
      call  _FSOME$$INTEGER
      mov   dword [_B], eax
      push  offset [_B]
      push  dword [_A]
      call  _PSOME$$INTEGER$INTEGER
      call      exit

Если посчитаете количество команд то увидите что при использовании функции выполняется на 2 команды больше, чем в процедурном варианте. Уверен что на других компиляторах, с различными настройками оптимизации можно увидеть совсем другой результат.
А по делу используйте функции когда вам надо вернуть одно значение, а вариант с процедурой когда нужно вернуть несколько значений.