|
问题一:
"在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示 overflow。"
(原文地址:http://user.qzone.qq.com/710428143/blog/1265025287)
这句话,编译程序的时候就指定了程序的栈的大小和在内存的硬地址。内存的硬地址,有那么多的程序,硬地址会不会不够用?而且栈需要连续的空间。栈到底是什么,怎么来的?一块连续的内存空间,在问题二中引用的话中,栈是要放参数的。既然栈用来放参数了,那堆要来干什么?
问题二:
“栈(stack):在函数调用时,第一个进栈的是主函数中子函数调用后的下一条指令(子函数调用语句的下一条可执行语句)的地址,然后是子函数的各个形参。”
(原文地址:http://user.qzone.qq.com/710428143/blog/1265025287)
我也是这么想的,因为子函数的返回地址要先入栈,按照栈的出入栈的顺序,应该返回地址要先入栈,然后返回地址要最后一个出栈。
上面引用的这句话说的是语句的地址,而下面引用的这句话却说是内容?说明:指令寄存器保存着下一条要执行的语句。
但是
“当程序中发生函数调用时,计算机做如下操作:首先把参数压入堆栈;然后保存指令寄存器(IP)中的内容作为返回地址(RET);第三个放入堆栈的是基址寄存器(FP);然后把当前的栈指针(SP)拷贝到FP,做为新的基地址;最后为本地变量留出一定空间,把SP减去适当的数值。”
(原文地址:http://user.qzone.qq.com/710428143/blog/1265018813)
这里却说是参数第一个入栈。?
(百度谷歌“入栈顺序”只能得到顺序是从右到左。)
文章越看越迷糊。
穷乡僻壤,可恶,C语言的书都没有哪去找汇编的书吖。
想念广州,只要去天河购书中心就行了。 |
|