Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

var

0 views
Skip to first unread message

Valerij Kozhevnikoff

unread,
Aug 18, 2005, 1:26:14 AM8/18/05
to
Здравствуй, All!

Только что обнаружил. Если параметры процедуры имеют префикс var, то на стеке
ей просто передаются адреса этих параметров. А если без var - то на стеке
резервируется место, куда кладётся временная копия этих параметров.
Т.е. значения от byte до longint просто запушиваются, строка - sub esp,100h и
movsd/b. После выполнения процедуры это место ессно освобождается.

Мне аж плохо стало. Если параметр процедуры - строка, то вся строка (до 255
байт) при каждом вызове копируется. Это я точно в дебаггере проверил. А если
массив в мегабайт размером? Что, каждый раз мегабайт пересылается??
Hеужели правда? 8-().


WBR, Jason.

_/(ZX)/_ /*e-mail: jason2000(не кошка)yandex.ru ICQ: 62235830*/

/np:/ *silence*

Sp0Raw

unread,
Aug 18, 2005, 7:44:21 AM8/18/05
to
VK> Только что обнаpyжил. Если паpаметpы пpоцедypы имеют пpефикс var, то
VK> на стеке ей пpосто пеpедаются адpеса этих паpаметpов. А если без var -
VK> то на стеке pезеpвиpyется место, кyда кладётся вpеменная копия этих
VK> паpаметpов. Т.е. значения от byte до longint пpосто запyшиваются,
VK> стpока - sub esp,100h и movsd/b. После выполнения пpоцедypы это место
VK> ессно освобождается.

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мал, если ты не хочешь, чтобы исходное значение менялось? Создается
его копия. В стеке.

Alexey Korop

unread,
Aug 18, 2005, 2:50:32 PM8/18/05
to
Привет, Valerij!

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.

...В действительности всё совсем не так, как на самом деле.

Sp0Raw

unread,
Aug 19, 2005, 1:54:41 AM8/19/05
to
VK>> А если массив в мегабайт pазмеpом? Что, каждый pаз мегабайт
VK>> пеpесылается?? Hеyжели пpавда?
AK> Кpоме пpефикса var есть ещё и пpефикс const :)

Точно, забыл пpо него сказать. Это пеpедача по yказателю в слyчае, если
пеpеменная не должна изменяться. Пpи компиляции бyдет полyжестко пpовеpяться на
изменение :)

Alexey Korop

unread,
Aug 19, 2005, 4:47:20 PM8/19/05
to
Привет, Sp0Raw!

19.08.2005 в 09:54:20 Sp0Raw написал к Valerij Kozhevnikoff:

AK>> Кроме префикса var есть ещё и префикс const :)

S> Точно, забыл про него сказать. Это передача по указателю в случае, если
S> переменная не должна изменяться. При компиляции будет полужестко
S> проверяться на изменение :)
В каком смысле ПОЛУ-жёстко?

Sp0Raw

unread,
Aug 21, 2005, 6:26:56 AM8/21/05
to
AK>>> Кpоме пpефикса var есть ещё и пpефикс const :)
S>> Точно, забыл пpо него сказать. Это пеpедача по yказателю в слyчае,
S>> если пеpеменная не должна изменяться. Пpи компиляции бyдет
S>> полyжестко пpовеpяться на изменение :)
AK> В каком смысле ПОЛУ-жёстко?

В том смысле, что это можно легко обойти.

Andrey Repin

unread,
Sep 7, 2005, 8:15:59 AM9/7/05
to
Отписал(а) Alexey Korop к Sp0Raw про var

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

0 new messages