为什么结构的数据成员内存从堆栈中从低位到高位分配的内存越来越高?这个过程中的机制是什么?
答案 0 :(得分:0)
一个优点是操作系统能够轻松检查进程(程序)中是否发生溢出。当堆栈从高到低生长时,堆段通常从低到高增长。如果两个段逐渐增长重叠,OS可以检测到过程中的溢出。
这是C程序的内存布局图。希望这有帮助。
此外,这种选择取决于OS设计者。如果你是初学者,就不要在意它。想想容易。
答案 1 :(得分:0)
堆栈通常是唯一向下发展的东西,而其他东西确实向上发展。但是,堆栈上的结构与堆中的相同结构相同:内存区域由内存中第一个字节的地址标识,填充机制也相同。
所以,有趣的问题不是“为什么堆栈上的结构向上填充”,而是“为什么堆栈会向下扩展?”
答案很简单:因为堆栈向下增长并且其上的对象由其第一个字节的地址标识,所以堆栈指针始终指向堆栈中的第一个元素。
这看似微不足道,但它在机器级别上简化了很多事情。例如,在PowerPC上,有一条指令将值保存在指针的偏移处,并将该指针更新为计算出的地址。该指令可以原子方式分配整个堆栈帧并将其链接到前一个堆栈帧,并且它不会以相反的方式工作。 (我希望这不是太多的技术细节......)