【发布时间】:2011-10-15 08:03:04
【问题描述】:
栈的方向(高内存地址到低内存地址或从低内存地址到高内存地址)取决于机器架构 示例 Intel:较高的内存地址到较低的内存地址 SPARC : 低内存地址到高内存地址
有什么方法可以通过代码改变栈内存分配的方向。
谢谢。
【问题讨论】:
标签: memory stack allocation
栈的方向(高内存地址到低内存地址或从低内存地址到高内存地址)取决于机器架构 示例 Intel:较高的内存地址到较低的内存地址 SPARC : 低内存地址到高内存地址
有什么方法可以通过代码改变栈内存分配的方向。
谢谢。
【问题讨论】:
标签: memory stack allocation
某些处理器包含显式电路,可将事物压入堆栈并在各种情况下弹出它们。其他处理器不包括用于“大”堆栈的任何此类电路,而仅提供有限数量的硬件寄存器或电路,用于存储诸如返回地址之类的内容,并且可能是软件可以复制存储在那些中的地址的一种方式寄存器或电路连接到内存的其他部分。
在硬件没有显式操作内存中的堆栈的处理器上,如果可以控制处理器将执行的所有代码,则可以使用任何想要的模式。但是,一般来说,处理器制造商会推荐一种用于实现堆栈的模式,并且编译器或其他人生成的代码很可能希望使用以这种方式实现的堆栈。
【讨论】:
堆栈用于机器指令级别。您不能使用代码更改处理单元的行为。唯一能做的就是创建程序仿真级别。
【讨论】:
一般来说,堆栈的管理是由编译器执行的(假设我们在这里讨论的是 C 或 C++ 之类的东西)。但是,ISA 可能会提供帮助,例如 x86 上的 push 和 pop 指令。
没有办法从 C 或 C++ 中执行此操作,除非您的编译器提供了不可移植的语言扩展或命令行选项来控制它(我不明白为什么会这样,因为更改它会使您的程序/库与所有其他程序/库不兼容!)
【讨论】: