首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASM -推送/弹出

ASM -推送/弹出
EN

Stack Overflow用户
提问于 2012-02-28 16:30:30
回答 3查看 214关注 0票数 2

为什么当您将一个值压入堆栈时,ESP寄存器会减少(而不是增加),而当您推出一个值时,ESP寄存器会增加(而不是减少)?

EN

回答 3

Stack Overflow用户

发布于 2012-02-28 16:36:41

这是因为堆栈是从上到下“增长”的,而不是堆,堆是自下而上分配的。

在地址空间有限的体系结构上,这是一个设计决策,您可以更灵活地使用它们-只是分配的两个内存区域的总和不能超过一定的限制。

如今,堆栈和堆地址空间无论如何都保存在单独的内存区域中,但他们决定保留向后增长的堆栈。

票数 7
EN

Stack Overflow用户

发布于 2012-02-28 17:17:40

这或多或少是一个武断的设计选择。如果堆栈指针在推送时递增,而在弹出时递减,那么堆栈将同样工作得很好。在一些语言中,文本是从右向左书写的,而不是从左向右书写的,并且特定的方向并不能真正使语言变得更好或更差。

票数 1
EN

Stack Overflow用户

发布于 2012-02-28 21:48:57

使用单一的内存系统,在程序员面临的许多环境中,你会让堆从较低的地址增长到较高的地址,堆栈从内存的顶部从高地址向下增长到较低的地址,从而最大限度地利用该内存而不会发生冲突。如果它们都长大了,就有必要让它们以某种痛苦和丑陋的方式跳跃,或者其中之一会受到限制,尽管有可用的空闲内存。在许多处理器上,您可以自由地重写malloc或创建自己的malloc,并让堆栈增长(一些指令集可以任意运行,而有些指令集则不需要额外的努力)和堆。不过,更好的做法是顺其自然,让堆栈逐渐变小,堆逐渐变大。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9478625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档