在 GNU C 中,结果是 13。因为使用了静态链接。
否则,如果使用动态链接,结果将为 16。
#include <stdio.h>
int h(){
int x = 1;
int g(int z){
return z + x; <------------------ P
}
int f(int y){
int x = y + 1;
return g(x * y);
}
return f(3);
}
int main(){
int a = h();
printf("%d\n", a);
}
在 P 点,Activation Record 为
z = 12
x = 4
y = 3
f 和指向代码 f 的指针
g 和指向代码 g 的指针
x = 1
h 和指向代码 h 的指针
一种
main 和指向代码 main 的指针
是对的吗?
但是,如果函数 g 返回,它是怎么回事?
g 的激活和变量 z 的激活被删除。
然后在堆栈帧中,查看孔。洞真的出现了吗?
并且根据In-line block,在函数h中,
变量x是最外层的块。(这意味着函数g'块嵌套在变量x的块中)下一个外部块是函数g,下一个函数f......那么,函数f的静态链接是否指向函数g的帧指针?还是函数h的帧指针?那么函数g的静态链接呢?