0

ご存知のとおり、関数が戻ると、スタックに割り当てられたオブジェクトが再利用され、その前に関連するデストラクタが呼び出されます。私の質問は、デストラクタを呼び出すことができるように、メモリ位置がオブジェクトを表すようにどのように決定されるのかということです。また、これを行うために発生する実行時のオーバーヘッドはありますか?

4

3 に答える 3

2

何を求めているのか正確にはわかりませんが、スタックに割り当てられたオブジェクトのメモリ位置はコンパイル時にわかります。それらの場所を決定するための実行時のオーバーヘッドはありません。

于 2012-06-24T03:13:43.427 に答える
2

スタックに割り当てられたオブジェクトの場所は、現在のスタックポインター位置へのオフセットとして計算されるため、実際には計算は必要ありません。

動的メモリマネージャがオブジェクトの割り当て場所を決定する必要があるヒープ割り当てオブジェクトとは異なり、スタックは直線的であり、必要に応じて大きくなります。コンパイル時に、コンパイラは、たとえばオブジェクトが現在のポインタにあることを認識します。指定されたバイト数より少なく、その変数が必要なときはいつでもバイナリコード全体でその値を使用します。

于 2012-06-24T03:16:03.530 に答える
1

デストラクタを呼び出すことができるように、オブジェクトを表すためにメモリ位置をどのように決定しますか?

メモリの場所は、コンストラクタがいつ呼び出されるかを決定しません。コンパイラは、スタックに割り当てられている変数を認識し、対応するデストラクタを呼び出すための適切なコードを作成します。

少なくとも、それらは通常スタック上にあります。重要なのは、メモリが格納されている場所に関係なく、同じロジックを使用できるということです。スタックに格納されるということは、単にそれらを何らかの方法で呼び出す必要があることを意味します。

于 2012-06-24T03:15:05.730 に答える