为什么堆栈中从低地址到高地址分配的结构的数据成员内存从高到低?这个过程中的机制是什么?
问问题
400 次
2 回答
2
一个优点是操作系统能够轻松检查进程(程序)中是否发生溢出。当堆栈从高到低增长时,堆段通常是从低到高增长。如果两个段逐渐增长到重叠,操作系统可以检测到过程中的溢出。
这是 C 程序的内存布局图。希望这有帮助。
此外,这样的选择取决于操作系统设计者。如果您是初学者,请不要在意。轻松思考。
于 2013-06-30T13:37:59.517 回答
1
堆栈通常是唯一向下增长的东西,而其他所有东西都会向上增长。然而,栈上的结构与堆中的结构相同:由其在内存中的第一个字节的地址标识的内存区域,填充机制也相同。
所以,有趣的问题不是“为什么堆栈上的结构向上填充”而是“为什么堆栈向下增长?”
答案很简单:因为栈向下增长并且上面的对象由它们的第一个字节的地址来标识,所以栈指针总是指向栈上的第一个元素。
这可能看起来微不足道,但它在机器级别上简化了很多事情。例如,在 PowerPC 上,有一条指令在指针的偏移处保存一个值,并将这个相同的指针更新为计算出的地址。该指令可以原子地分配整个堆栈帧并将其链接到前一个堆栈帧,反之则不起作用。(我希望这不是太多的技术细节......)
于 2013-06-30T13:46:16.063 回答