x86和x64堆栈帧

时间:2009-11-25 17:44:57

标签: c++ x86 64-bit

编译器在x86 v x64体系结构中在堆栈上分配变量时有什么区别?说我有一个功能

foo(){
    int i = 5;
    i += 4;
}

这两种体系结构在堆栈上的分配方式有何不同?

4 个答案:

答案 0 :(得分:4)

对于Microsoft的x64 ABI,请查看“Stack Usage”下的http://msdn.microsoft.com/en-us/library/7kcdt6fy.aspx。它与x86 ABI有很大不同。

其他x64 ABI(Linux,OS X等)可能与微软的相似但略有不同。 GCC的文档可能是开始寻找这些文档的好地方。

答案 1 :(得分:2)

也许我对64位CPU没有足够的工作[我的大部分汇编编程都在MIPS中;一点点x86],但为什么会有区别?

你尝试过吗?看看产生了哪些指令......

答案 2 :(得分:2)

正如Paul所说,编译器可能根本不会将这个变量放在堆栈上。我只想提一下,编译器耗尽寄存器并最终使用堆栈进行变量存储的想法称为“寄存器溢出”和you can read more about it on Wikipedia

答案 3 :(得分:1)

编译器甚至不太可能将此变量放在堆栈上 - 它很可能将此变量保存在寄存器中。不同之处在于编译器是否必须在堆栈上存储信息,而不是 存储信息。