标签:
函数调用入栈顺序
在函数调用时,第一个进栈的是主函数中函数调用后的下一条指令的地址,然后是函数的各个参数。再然后是函数中的局部变量。注意静态变量是不入栈的。
Pascal语言中函数参数从左到右入栈的,C语言则从右至左。原因是Pascal语言不支持可变长参数,而C语言支持这种特色。通过栈堆分析可知,自左向右的入栈方式,最前面的参数被压在栈底。除非知道参数个数,否则是无法通过栈指针的相对位移求得最左边的参数。
堆栈溢出
堆栈溢出的产生是由于过多的函数调用,导致调用堆栈无法容纳这些调用的返回地址。堆栈溢出很可能由无限递归(Infinite recursion)产生
#include<stdio.h> int main() { char name[8]; printf("Please type your name:"); gets(name); printf("Hello.%s!",name); return 0; }
标签:
原文地址:http://www.cnblogs.com/qionglouyuyu/p/4865816.html