Временные значения |
||
Локальные данные |
||
Регистры процессора |
||
Связь по доступу |
||
Связь по управлению |
||
Фактические параметры |
||
Возвращаемое значение |
||
Временные значения |
||
Локальные данные |
||
Регистры процессора |
||
Связь по доступу |
||
Связь по управлению |
||
Фактические параметры |
||
|
|
Передача аргументов
– передача по значению;
– передача по указателю;
– передача по ссылке;
– копирование-восстановление – значения аргументов при вызове передаются в вызываемую процедуру, а если аргументы имеют l-value, то при возврате новые значения записываются в локальные переменные вызывающей процедуры (в вызове function(a, a+b) первый аргумент имеет l-value, а второй – не имеет);
– передача по имени – транслятором
создаются невидимые программисту thunk-функции,
передаваемые из вызывающей процедуры и вычисляющие значения аргументов в
контексте вызывающей процедуры при каждом обращении к аргументу в вызываемой
процедуре (если вызов функции выглядит примерно так:
function1( (a+ function2(b)) * c, …)
а сама функция выглядит так:
function1(int arg1) {
…
… + arg1 * …
…
…* ( arg1 – … )
…
}
);
Локальные данные процедур
Доступ к объекту примитивного типа
Команды процедуры |
…
… Запись активации |
Доступ к элементу второго динамического массива в поле локальных данных записи активации
|
||||||||||
Доступ к элементу массива в куче
Текстуальная область видимости без вложенных процедур
Локальные объекты в записи активации.
Нелокальные объекты – в области статических данных.
Адреса (смещения) и тех и других могут быть вычислены во время трансляции.
Блочные области видимости
Объявление |
Область видимости |
int a = 0; |
B0, B2 |
int b = 0; |
B0, B1 |
int b = 1; |
B1, B3 |
int a = 2; |
B2 |
int b = 3; |
B3 |
main()
{int a=0;
int b=0;
{int b=1;
{int a=2;
printf(“a=%d b=%d\n”,a,b);
}
{int b=3;
printf(“a=%d b=%d\n”,a,b);
Блок |
a |
b |
B2 |
2 |
1 |
B3 |
0 |
3 |
B1 |
0 |
1 |
B0 |
0 |
0 |
}
printf(“a=%d b=%d\n”,a,b);
}
printf(“a=%d b=%d\n”,a,b);
}
Выделение памяти локальных объектов блоков раздельно в области локальных данных записи активации:
… |
a2 | b3 |
b1 |
b0 |
a0 |
… |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.