是否可以像这样放大堆栈帧:
subq $1, %rsp
如果我们只想在堆栈上存储char
(例如)。
或者我们是否需要将堆叠放大8或其他倍数。有没有对齐?
答案 0 :(得分:4)
简单地说,“是的。”您可以按照指示的方式精确放大堆栈框架。但是,正如您在其余问题中提出的那样,您可能会遇到堆栈对齐问题。
这些问题很少会导致您自己的代码出现问题。老实说,只要您没有违反某些架构限制,您就可以以任何方式管理堆栈并传递参数。
但是,为了与系统和库调用进行互操作,通常需要堆栈对齐。您可能会发现this文档很有用。就像一个例子,Linux下x86和x86_64上的GCC期望(强制执行)堆栈的16字节对齐并使用cdecl
。
您可能希望在您正在使用的平台和库的参考文档中找到任何调用标准和对齐要求。