我很难理解激活记录(我已经阅读了多个关于它的答案)。
假设我们有一个代码
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 |
_______________________
激活记录会将静态局部变量、函数地址、函数参数和返回值放在它的堆栈上,我应该理解为在激活记录(或被调用函数)执行完成后,激活记录被其返回值替换吗?它的堆栈被释放了吗?
同样的函数被多次调用,并且调用堆栈应该保存返回数据的位置,是相同的activation_record被推入堆栈还是在每次调用函数时创建?综上所述,是否可以在编译期间将激活记录推送到堆栈上?
感谢您的回答