[Очень невнятно написал предыдущее сообщение. Постараюсь чуть точнее, и со ссылками.]В Delphi 5 [1] параметры-переменные [var parameters] всегда передаются по ссылке, как 32-битные указатели.
Параметры-значения [value parameters] или параметры-постоянные [const parameters] передаются по значению (by value) или по ссылке (by reference), в зависимости от типа и размера: ... множество, запись или статический массив длиной 1, 2 или 4 байта передаются как 8-ми, 16-ти и 32-ух битные значения. Более длинные множества, записи или статические массивы передаются как 32-битный указатель на значение. Исключением из этого правила являются передача записей под соглашениями cdecl, stdcall, sefecall. …
Под соглашениями pascal, ... параметры передаются через стек. Под соглашением register до трех параметров передаётся через регистры процессора, а остальные через стек. Первые три параметра передаются через регистры EAX, EDX, ECX. Вещественные параметры и указатели на методы не квалифицируются как регистровые параметры.
(подробнее изложено в фирменной документации).
В Turbo Pascal 5, 6, 7 [с учетом, когда был введено ключевое слово const в описании параметра] правила те же, что и в Delphi под соглашением pascal. См., например [2].
Во Free Pascal нельзя предполагать, что длинный параметр-постоянная, например массив длиннее четырех байт, передается по ссылке [3]. [Сужу по документации, я им не пользовался].
Как выше написано, в Delphi 5 и TP 6, 7 длинный параметр-значение передается по ссылке. Выделение памяти для значений массива происходит в самой процедуре. Поэтому ошибка переполнения стека возникает не при вызове процедуры, а на её «входе», т.е. при выделении памяти под локальные переменные. Даже в отладке на высоком уровне (не в окне CPU [Delphi], или во внешнем отладчике [в TP]) это хорошо видно.
[1] Object Pascal Language guide [Delphi 5]. Chapter 12 Program control / Parameters and function results / Parameter passing. (документацию легко нагуглит по фразе “Object Pascal Language guide”, например,
pdf.)
[2] Руководство по языку Borland Pascal 7. Часть III. В среде Borland Pascal. Глава 22 Вопрос упраления. (
html) [Нагуглить можно много ссылок].
[3] Reference guide for Free Pascal, version 2.6.0. Document version 2.6 (
pdf). Using function and procedures / Constant parameters (p. 152, Remark).