在x86和x64架构中,当编译器在堆栈上分配变量时有什么不同?假设我有一个函数
foo(){
int i = 5;
i += 4;
}在这两种架构中,如何在堆栈上进行不同的分配?
发布于 2009-11-26 02:09:37
对于微软的x64 ABI,可以在"Stack Usage“下查看http://msdn.microsoft.com/en-us/library/7kcdt6fy.aspx。它与他们的x86 ABI有很大的不同。
其他的x64 ABI (Linux,OS等)可能与微软的相似,但又有细微的不同。GCC的文档可能是一个很好的开始寻找它们的地方。
发布于 2009-11-26 01:49:42
也许我在64位CPU上的工作还不够,我的大部分汇编语言都是MIPS;一点x86,但是为什么要有区别呢?
你试过了吗?看一下生成了什么指令...
发布于 2009-11-26 02:02:54
正如Paul所指出的,编译器可能根本不会将这个变量放到堆栈中。我只想提一下,编译器耗尽寄存器并最终使用堆栈进行变量存储的想法被称为“寄存器溢出”,以及you can read more about it on Wikipedia。
https://stackoverflow.com/questions/1798704
复制相似问题