C++では、ローカル変数は常にスタックに割り当てられます。スタックは、アプリケーションが占有できるメモリの一部です。そのメモリはRAMに保存されます(ディスクにスワップされていない場合)。さて、C++コンパイラは、ローカル変数をスタックに格納するアセンブラコードを常に作成しますか?C++ CPUレジスタの使用
テイク、例えば、次の簡単なコード:
MIPSアセンブラコードでint foo(int n) {
return ++n;
}
、これは次のようになります。
foo:
addi $v0, $a0, 1
jr $ra
あなたが見ることができるように、私はする必要はありませんでしたnにはスタックをまったく使用しないでください。 C++コンパイラがそれを認識し、CPUのレジスタを直接使用するでしょうか?
編集:おかげさまで、あなたのほぼ即座で広範な回答に感謝します。 fooの関数本体は、ではなく、return ++n;
でなければなりません。 :)
コンパイラは最適化します。 x86 ISN - 'gccの-fverbose-ASM -O2 -S yoursource.c'その後、偉大なリンクのために1 –