Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2021, 23:10   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию Result как переменная

Вопрос такой:
Обращение к result занимает столько же времени и места как к внутренней переменной функции, или все же дольше ?
Kronos913 вне форума Ответить с цитированием
Старый 07.06.2021, 00:16   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Нужно смотреть на ассемблерный код функции. Например:
Код:
function f(): integer;
begin
  result := 1;
end;
Превратилась в:
Код:
mov eax,$00000001
ret
То есть result лег на регистр eax, через который и вернулся результат функции. А вы уверены, что это узкое место программы, и не осталось мест, где, например, применен неэффективный алгоритм?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 07.06.2021, 00:24   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Одинаково:
Код:
function test: integer;
var
  a: integer;
begin
  a:=5;
  result:=5;
end;
Код:
Unit1.pas.33: a:=5;
004BD58A C745F805000000   mov [ebp-$08],$00000005
Unit1.pas.34: result:=5;
004BD591 C745FC05000000   mov [ebp-$04],$00000005
Arigato вне форума Ответить с цитированием
Старый 07.06.2021, 02:32   #4
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Практически одинаково в случае
Код:
function Test: string;
var S : string;
begin
  Result:='5';
  S:='10';
end;
Код:
Unit45.pas.29: Result:='5';
004B848E 8BC3             mov eax,ebx
004B8490 BAD0844B00       mov edx,$004b84d0
004B8495 E852CDF4FF       call @LStrAsg
Unit45.pas.30: S:='10';
004B849A 8D45FC           lea eax,[ebp-$04]
004B849D BADC844B00       mov edx,$004b84dc
004B84A2 E889CDF4FF       call @LStrLAsg
northener вне форума Ответить с цитированием
Старый 07.06.2021, 14:00   #5
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

Но лучше сразу вычисления проводить в result, так как если заводить дополнительную переменную, а в конце делать присвоение result := a, то это будет лишняя команда, да и лишнее выделение памяти в стеке.
Arigato вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Форма как переменная Toxa16 Общие вопросы Delphi 7 27.06.2012 01:21
переменная, как набор битов. kolob2000 Общие вопросы C/C++ 6 09.04.2011 16:51
Как получить несколько RecordSet (Multiple Active Result Sets) MARS avoropay БД в Delphi 1 09.12.2010 18:51
Процедура, как переменная russian-stalker Общие вопросы Delphi 2 03.10.2009 18:01
Массив как структурная переменная mazak Общие вопросы C/C++ 8 15.07.2009 21:55