1. ホーム
  2. c++

[解決済み] CやC++でいうところのアクティベーションレコードとは何ですか?

2022-01-29 05:18:34

質問

C/C++プログラマーにとって、この言葉の意味と重要性について教えてください。

少なくとも概念的には、どのプラットフォームでも同じなのでしょうか?

関数でローカル変数を格納するために使われる、割り当てられたメモリのブロックと理解しているのですが......。

もっと知りたい

解決方法は?

アクティベーション・レコードは、スタック・フレームの別称です。コールスタックを構成するデータ構造です。一般に次のような構成になっています。

  • 着呼側のローカル
  • 呼び出し元への戻りアドレス
  • 着信側のパラメータ
  • 直前のスタックポインタ(SP)の値

このようにコールスタックは、新しいサブルーチンが追加されるとスタックに追加され、サブルーチンが戻ると(通常)スタックから削除される、任意の数の活性化レコードで構成されています。

実際の構造および要素の順序は、プラットフォームおよび実装によって異なります。

C/C++プログラマ向け。 一般知識 この構造は、呼び出し規約のような特定の実装機能を理解するのに役立ち、さらにバッファオーバーフローが第三者の悪質なコードを実行させる理由も理解することができます。

もっと詳しく 深い知識 は、上記の概念をさらに推し進め、デバッガやデバッグシンボルがない場合でも、プログラマがアプリケーションをデバッグし、メモリダンプを読み取ることができるようにします。

しかし、より一般的には、C/C++プログラマは、趣味のプログラミングキャリアの大部分を、コールスタックについて少しも考えることなく過ごすことができます。