C ++コンパイラには、スタックメモリを使用して最適化するために、関数内の各ローカル変数の有効期間が終了する時刻を決定する方法がありますか、それとも単に関数実行の有効期間と等しくなりますか?
2 に答える
3
関数が戻る前に、スタック変数のメモリを再利用することはできません。これは、特定の呼び出しのスタック フレームの一部であるためです。リターン ポインターはそれらの下にあり、呼び出し元のフレームはそれらの上にあります。明らかに、リターン ポインタは関数がリターンするまで解放できないため、スタック変数はいわば岩と固い場所の間にスタックされ、それらのメモリはリターン後まで使用できないままになります。
于 2010-07-13T17:44:09.100 に答える
2
ほとんどのコンパイラは、スタック上のすべての変数に一度にメモリを割り当てます。例えば:
void f() {
int n = 0; // lifetime of n begins here
{
int x = 0; // lifetime of x begins here
} // lifetime of x ends here
} // lifetime of n end here
関数のエントリで、2 つの整数に対してメモリを 1 回割り当てます。ただし、これは実装の詳細であり、プログラマには見えません。また、2 つの変数 n と x の有効期間は同じではありません。
于 2010-07-13T17:39:41.207 に答える