2016-02-22 17 views
5

ダイナミックリンクは以前のアクティベーションレコードを指しているので、ダイナミックスコープのプログラミング言語では意味があります。しかし、静的スコープのプログラミング言語では、アクセスリンク(1つの下位ネストレベルで機能のアクティブ化記録を指す)が十分でない理由は何ですか? 特にCで - なぜアクセスリンクが必要でないのですか?そして、なぜダイナミックリンクが必要ですか?機能起動レコードにダイナミックリンクが必要なのはなぜですか? (静的スコープ言語で)

+1

さらに詳しい情報を提供してください。私はプログラミング言語Cと一緒に使用されている用語 "活性化レコード"を聞いたことがありません。 – Downvoter

+1

多分OPは[これは](http://www.cs.nmsu.edu/~rth​​/cs/cs471/f00 /ARIs.html) – LPs

+0

これは共有ライブラリの静的変数に関連していますか? – wallyk

答えて

4

アクティベーションレコード:スタックフレーム

ダイナミックリンク:[保存]フレームポインタ

ので、あなたの質問を次のように解釈します:なぜフレームポインタが必要ですか? [1]

フレームポインタはではなく、が必要です。

一部のコンパイラ(Green Hills C++、-O2付きGCCなど)は、通常、生成しないか、生成しないように要求することができます(MSVC、GCC)。それはもちろんありません、と述べた

は、その利点を持っている:call stack

  • 簡単トラバース:stack traceを生成するフレームポインタがヘッドを形成してリンクリストを横断するのと同じくらい簡単です。スタックトレースとデバッガの実装をはるかに簡単にします。

  • より簡単なコード生成:常に変化するスタックポインタの代わりにフレームポインタをインデックスすることによって、スタック変数を参照できます。各プッシュ/ポップでスタックポインタが変化し、フレームポインタは、(prologue/epilogue間)関数内で一定に保た

  • 物事がゆがんで行くべき、stack unwindingは、フレームポインタを使用して行うことができます。これは、Borlandの構造化例外処理(SEH)の仕組みです。

  • スタック管理を合理化:setjmp(3)alloca(3)C99-VLAの特に実装可能(通常は行うが)それに依存します。

欠点:

  • レジスタの使用:x86のみ8汎用レジスタを得ました。これらの1つは、フレームポインタを保持するために完全に専用化する必要があります。
  • オーバーヘッド:すべての機能に対してプロローグ/エピローグが生成されます。

しかし気づいたように、コンパイラはフレームポインタを維持しなくても完全に細かいコードを生成できます。


[1]それが意味するものではない場合は、詳しく説明してください。

+0

おそらく、ダイナミックリンクは「フレームポインタ」ではなく「ディスプレイリンク」です。 –

+0

@BasileStarynkevitch私が理解しているように、ダイナミックリンクは、関数のアクティベーションレコードをそのダイナミックなプレデセッサ(つまり、呼び出し側のアクティベーションフレーム)にリンクします。したがって、私はこの質問を意味として解釈しました。なぜ、フレームポインタが必要なのですか?しかし、OPが心に留めていることであれば、私は完全にはわかりません。それを反映するために私の答えを編集しました。 – a3f

2

ご質問はoptimizing optionGCCのに関連するかもしれない、そしてthisを参照してください。

ところで、多くの人々は、あなたが活性化レコードに名前を何(call stackに)コールフレームを命名されています。 continuation、またcontinuation passing styleA-normal formの概念は密接に関連しています。

動的リンクは、実際にはnested関数(とおそらくclosures)にのみ有効であり、標準Cにはそれらがありません。一部の人々はディスプレイのリンクを話します。標準Cはネストされた関数を持っていないので、関連するトリック(表示リンク、トランポリン、...)は必要ありません。

GCCコンパイラはC言語の拡張としてnested functions提供し、そしてあなたが考えているものに非常に密接に、活性化レコードのダイナミックリンクでそれらを実装します。ウィキペディアもman or boy testtrampolineでお読みください。私は私にもっとよく知っている、この命名法を使用します

関連する問題