IN параметр -- только для входа, т.е. изменять его нельзя. По сути, процедура работает с константой.
VAR параметр -- работает с переменной, я думаю это объясняет разницу в машинном коде -- компилятор готовит структуры как для массива. 6 литер -- это 12 байт, плюс скрытые поля: тип, размер, наследование и всякое такое.
OUT -- для выходных значений, длина которых может быть существенна и пихать их в стек -- накладно. По большому счёту -- OUT после недавних измений семантики -- примерно равен VAR.
Уверен, что вести себя компилятор будет как и при VAR.
Отсутствие префикса параметра заставляет компилчтор генерить код "по значению", а не "по ссылке". На сколько я понимаю КП.