【发布时间】:2010-12-22 09:39:35
【问题描述】:
在 C++ 中,局部变量总是在堆栈上分配。堆栈是您的应用程序可以占用的允许内存的一部分。该内存保留在您的 RAM 中(如果没有换出到磁盘)。现在,C++ 编译器是否总是创建将局部变量存储在堆栈上的汇编代码?
以下面的简单代码为例:
int foo( int n ) {
return ++n;
}
在 MIPS 汇编代码中,可能如下所示:
foo:
addi $v0, $a0, 1
jr $ra
如您所见,我根本不需要为 n 使用堆栈。 C++ 编译器会识别这一点,并直接使用 CPU 的寄存器吗?
编辑:哇,非常感谢您几乎立即和广泛的回答! foo 的函数体当然应该是return ++n;,而不是return n++;。 :)
【问题讨论】:
-
编译器会优化。试试
gcc -fverbose-asm -O2 -S yoursource.c然后看看yoursource.s
标签: c++ compiler-construction assembly mips cpu-registers