放大堆栈框架 - 对齐?
Enlarge the stack frame - Alignment?
是否可以像这样放大栈帧:
subq , %rsp
如果我们只想在堆栈上存储一个char
(例如)。
或者我们是否需要将堆栈扩大为 8 的倍数之类的。有对齐吗?
简单地说,"Yes."您可以按照您指定的方式精确地放大堆栈帧。但是,正如您在其余问题中所问的那样,您可能 运行 遇到堆栈对齐问题。
这些问题很少会在您自己的代码中引起问题。老实说,只要不违反某些体系结构限制,您就可以以任何您喜欢的方式管理堆栈和传递参数。
但是,要与系统和库调用互操作,通常需要堆栈对齐。您可能会发现 this 文档很有用。举一个例子,在 x86 上 Linux 和 x86_64 下的 GCC 期望(强制)堆栈的 16 字节对齐并使用 cdecl
。
您可能希望在您正在使用的平台和库的参考文档中找到任何调用标准和对齐要求。
是否可以像这样放大栈帧:
subq , %rsp
如果我们只想在堆栈上存储一个char
(例如)。
或者我们是否需要将堆栈扩大为 8 的倍数之类的。有对齐吗?
简单地说,"Yes."您可以按照您指定的方式精确地放大堆栈帧。但是,正如您在其余问题中所问的那样,您可能 运行 遇到堆栈对齐问题。
这些问题很少会在您自己的代码中引起问题。老实说,只要不违反某些体系结构限制,您就可以以任何您喜欢的方式管理堆栈和传递参数。
但是,要与系统和库调用互操作,通常需要堆栈对齐。您可能会发现 this 文档很有用。举一个例子,在 x86 上 Linux 和 x86_64 下的 GCC 期望(强制)堆栈的 16 字节对齐并使用 cdecl
。
您可能希望在您正在使用的平台和库的参考文档中找到任何调用标准和对齐要求。