У меня есть понимание понимания активации записи (я прочитал несколько ответов об этом).Запись активации
Предположим, у нас есть код
int n(int a){
int b = a/2;
return a + b;
}
int main(){
int first = 1;
int second = n(first);
int third = 3;
int fourth = n(third);
return 0;
}
, когда программа начинает выполняться, стек будет заполнен, такие как
| first |
__________
| activation_record |
| first |
____________________
| third |
| activation_record |
| first |
_____________________
| activation_record1 |
| third |
| activation_record |
| first |
_______________________
запись активации будет ставить статические локальные переменные, адрес функции, функции параметры и возвращаемое значение в его стеке, должен ли я понять это, например, после того, как запись активации (или функция вызываемого абонента) выполнена, запись активации заменена своей возвратной долей, и ее стек освобожден?
Кроме того, с той же функцией, которая вызывается несколько раз и имеет стек вызовов, который должен содержать, куда возвращать данные, будет тот же самый файл активации, который вставляется в стек или создается каждый раз, когда вызывается функция? С учетом всего остального, можно ли активировать запись активации в стек во время компиляции?
Спасибо за ответ
Это искусство ASCII должно быть четыре разных моментальных снимка стека? –
@MartinBonner да – Darlyn