質問: 関数内の変数について g++やgccで関数内で定義した変数をレジスタに割り当てる方法が知りたいです。 あと、関数内で定義した変数は、スタック上やヒープ上に作られると思いますが、この基準はどうなっているのでしょうか?
回答: > g++やgccで関数内で定義した変数をレジスタに割り当てる方法が知りたいです。 次のようにします。 register int variable asm("レジスタ名"); > 関数内で定義した変数は、スタック上やヒープ上に作られると思いますが、この基準はどうなっているのでしょうか? gccでもターゲットによって事情は異なりますが... 記憶クラス指定子がないか、autoまたはregisterを付けた場合、割付け可能なレジスタがあればレジスタに割付けられます。そうでなければスタックに割付けられます。ただし、volatile修飾子を伴う場合は、上記の場合でも必ずスタックに割付けられます。 ヒープに割付けられるのは、基本的にはmalloc, calloc, reallocで割付けた場合です(間接的にそれらの関数を呼び出すものも含む)。それ以外では、c++で、送出された例外オブジェクトがヒープに割付けられます。