Показать сообщение отдельно
  #9  
Старый 25.10.2012, 11:13
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

для общего развития неплохо бы прочитать
http://www.transl-gunsmoker.ru/2008/12/1.html
http://www.transl-gunsmoker.ru/2008/12/2.html
http://www.transl-gunsmoker.ru/2008/12/3.html
http://www.transl-gunsmoker.ru/2008/12/4-ia64.html
http://www.transl-gunsmoker.ru/2008/12/5-amd64.html
Особенно третью и пятую части.

По передаче параметров тут так. - говорю за x86 - stdcall
Без модификаторов const,var или out
boolean, char, целочисленные вплоть до (LongInt/DWORD), а так же всякие Pointer`ы- каждая величина кладётся в стек и занимает в стеке 4 байта.
Int64 кладётся в стек и занимает в стеке 8 байт.
String - представляет собой указатель на первый символ строки и занимает в стеке 4 байта. Перед вызовом процедуры производится увеличение количества ссылок на строку.
Record, состоящий из вышеперечисленного кладётся в стек весь целиком.

С модификатором const
boolean, char, целочисленные вплоть до (LongInt/DWORD), а так же всякие Pointer`ы - каждая величина кладётся в стек и занимает в стеке 4 байта.
Int64 - кладётся в стек и занимает в стеке 8 байт.
String - представляет собой указатель на первый символ строки и занимает в стеке 4 байта. Увеличение счётчика не производится.
Record`ы - в стек кладётся указатель на начало структуры.

С модификатором var
Для всех типов в стек кладётся адрес переменной.

С модификатором out
Для всех типов в стек кладётся адрес переменной.
Ответить с цитированием