栈就不用说了。。函数都要进栈,调用栈按我的理解应该是指当前的应用程序所使用的栈空间,由N多个栈帧所组成,而每个栈帧对应了一个未完成的函数,要注意未完成这三个字,一个函数完成了就出栈了,自然也就谈不上栈帧神马的了,按我浅薄的理解,每个函数都会进栈,而不同的函数进不同的栈帧,至于《算法竞赛入门经典》上所说的“上一个”栈帧,按我的不成熟的理解就是——进一个函数势必会进入一个栈帧,而当这个函数在其他函数中被调用时,用gdb显示“上一个”栈帧则会显示出进这个函数之前所在的函数。举个简单的例子:
int main()
{
printf("Hello world!\n");
return 0;
}
由于main()也是一个函数,所以也要占用一个栈帧,进入main函数后,会进入printf()这个函数,打印出Hello world!,如果在这里设一个断点,则程序在此处停住,在用gdb的up命令显示上一个栈帧,则会显示出main函数的栈帧。
由于未学习过汇编,对栈的理解还很浅薄,诸位如有觉得什么地方不对的,请务必指出,谢谢.