【发布时间】:2014-08-30 13:41:26
【问题描述】:
我一直在阅读 x86 堆栈和 CDECL 约定,并阅读了一些让我感到困惑的东西。
列出的调用者的职责包括弹出参数、使用它们或简单地增加 %esp 以删除它们。
最后一部分是如何工作的?
例如,假设 %esp 的初始值为 0x105000,您将当前堆栈帧的值减少 $0x1c。您分配了一些数据,然后将其递增回来 - 在这种情况下,这些数据不会仍然在内存中浮动吗?内存是怎么清除的?访问 0x104FF4 会导致分段错误,如果是,是什么清除了那里的数据?
【问题讨论】:
-
你觉得“清晰”的记忆是什么感觉?你如何“漂浮”在记忆中?
-
Ehm,'clear' 我想我的意思是用于返回到它们在被设置为刚刚弹出的堆栈帧中的其他值之前保持的默认值的字节 - 如果这样甚至存在默认值。 'float' 我的意思是让这些字节保持弹出帧中设置的值。
-
对不起,如果我没有多大意义,我仍在试图弄清楚堆栈的工作原理以及它与堆的不同之处。我只是很困惑是否必须像在 C 中释放已分配结构的方式一样释放堆栈——首先是每个元素,然后是整个结构;或者操作系统是否为您做到了;或者您是否根本不需要释放它。
标签: assembly x86 cdecl stack-pointer