Только что обнаружил. Если параметры процедуры имеют префикс var, то на стеке
ей просто передаются адреса этих параметров. А если без var - то на стеке
резервируется место, куда кладётся временная копия этих параметров.
Т.е. значения от byte до longint просто запушиваются, строка - sub esp,100h и
movsd/b. После выполнения процедуры это место ессно освобождается.
Мне аж плохо стало. Если параметр процедуры - строка, то вся строка (до 255
байт) при каждом вызове копируется. Это я точно в дебаггере проверил. А если
массив в мегабайт размером? Что, каждый раз мегабайт пересылается??
Hеужели правда? 8-().
WBR, Jason.
_/(ZX)/_ /*e-mail: jason2000(не кошка)yandex.ru ICQ: 62235830*/
/np:/ *silence*
VK> Мне аж плохо стало. Если паpаметp пpоцедypы - стpока, то вся стpока
VK> (до 255 байт) пpи каждом вызове копиpyется. Это я точно в дебаггеpе
VK> пpовеpил. А если массив в мегабайт pазмеpом? Что, каждый pаз мегабайт
VK> пеpесылается?? Hеyжели пpавда? 8-().
Вообще-то для этого и сделано Var. Hе только для возвpата значения, но и для
пеpедачи его по yказателю.
А ты как дyмал, если ты не хочешь, чтобы исходное значение менялось? Создается
его копия. В стеке.
18.08.2005 в 09:26:07 Valerij Kozhevnikoff написал к All:
VK> Только что обнаружил. Если параметры процедуры имеют префикс var, то
VK> на стеке ей просто передаются адреса этих параметров. А если без var
VK> - то на стеке резервируется место, куда кладётся временная копия этих
VK> параметров. Т.е. значения от byte до longint просто запушиваются,
VK> строка - sub esp,100h и movsd/b. После выполнения процедуры это место
VK> ессно освобождается.
VK> Мне аж плохо стало. Если параметр процедуры - строка, то вся строка
VK> (до 255 байт) при каждом вызове копируется. Это я точно в дебаггере
VK> проверил.
Интересный подход :) А почитать VP21LANG.PDF, страница 129 и далее не
пробовал?
VK> А если массив в мегабайт размером? Что, каждый раз мегабайт
VK> пересылается?? Hеужели правда?
Кроме префикса var есть ещё и префикс const :)
С уважением, Alexey.
...В действительности всё совсем не так, как на самом деле.
Точно, забыл пpо него сказать. Это пеpедача по yказателю в слyчае, если
пеpеменная не должна изменяться. Пpи компиляции бyдет полyжестко пpовеpяться на
изменение :)
19.08.2005 в 09:54:20 Sp0Raw написал к Valerij Kozhevnikoff:
AK>> Кроме префикса var есть ещё и префикс const :)
S> Точно, забыл про него сказать. Это передача по указателю в случае, если
S> переменная не должна изменяться. При компиляции будет полужестко
S> проверяться на изменение :)
В каком смысле ПОЛУ-жёстко?
В том смысле, что это можно легко обойти.
AK>>> Кроме префикса var есть ещё и префикс const :)
S>> Точно, забыл про него сказать. Это передача по указателю в случае,
S>> если переменная не должна изменяться. При компиляции будет
S>> полужестко проверяться на изменение :)
AK> В каком смысле ПОЛУ-жёстко?
Создай в процедуре ссылку на эту переменную и сиди себе, изменяй.
/Daemon/ aka /ANR Daemon/ aka /sirAndrey/ в миру /*Андрей Репин/*
[БК http://www.combats.ru/ - Demons city - Sand city]
... [07.09.05 17:15:59] Daemon@DAEMON2 uptime 27 day(s), 22:14:57