有一个关于堆栈的问题???
neke 2002-09-22 12:15:08 有一个关于堆栈的问题,不知道我理解的对不对.比如说有一段程序:
地址 代码
100 int x = 5;
101 int y = 7;
102 cout<<x;
103 Func(x,y);
104 y = 9;
105 return;
1当程序转去执行Func()函数时,指令指针寄存器中的地址加1,成为地址104,随后这个地址(104)被放入堆栈,它作为函数Func()的返回地址。2然后在堆栈中,也就是在地址104的上面为返回值的类型开辟新的空间(书上说这个空间不放入任何值,直到本地变量被初始化。这点我不是很理解,本地变量指的是哪里的变量?)。3被调用函数的地址放在一块特殊内存区域中,这时候指令指针开始执行被调用函数。4当前的堆栈栈顶被存入栈帧(当前的堆栈是为返回值的类型开辟新的空间的地址吗?)。5函数所有变元放入堆栈。6现在执行指令指针中的指令,也就是函数的第一条指令。7局部变量按期定义的方式压入堆栈。8当函数返回时,返回值放入为返回值的类型开辟的新空间。9然后堆栈直接移到栈帧指针,弹出上面所有局部变量和变元。10返回值被弹出堆栈。11从堆栈恢复104到指令指针。12然后返回指令指针去执行104。
我这样理解对吗?你可以讲更深入一些吗???/谢谢!!!