最新のOSでは、メモリアドレスバインディングが「動的」で、実行時に発生することがあります。しかし、我々は仮想メモリスキームを使用し、各プロセスは独自の仮想ユーザメモリ空間を取得するので、なぜ我々はまだ遅く、実行時バインディングをしますか?仮想ページアドレスが物理ページにマップされるため、コンパイル時アドレスバインディングを実行できませんか?ランタイムメモリアドレスバインディングの必要性
答えて
実行可能ファイル自体が固定仮想アドレスにマップされる可能性のある、ほとんどのOSで実行可能ファイルのリンク時バインディングを使用します。実行時に再配置を必要とせずに、場所のいたるところに絶対アドレスを埋め込むことができます。もちろん、異なるプロセスで同じ仮想アドレスを使用できるためです。仮想メモリのないシステムでは、各プロセスが異なるアドレスを使用する必要があります。
これはライブラリには当てはまりません。ライブラリは、ロードしようとするプロセスで空きになるアドレスの範囲を知ることができないため、position-independent codeを使用する必要があります。
OS Xでも実行可能ファイルにはPICが必要です。私はなぜそれを見上げたことはありません。多分彼らはASLRをやりたいと思っています。
私は完全に間違っているかもしれませんが、私はWin9xが位置に依存しないコードを必要としないことを覚えていると思うし、DLLをインストールすることは、
仮想メモリと動的バインディングは、2つの独立した概念です。動的バインディングは仮想メモリのないシステムで行われます。
ほとんどの場合、アプリケーションは位置独立コードを使用しようとします。これは、メモリ内のどこにでもロードされ、正しく実行されるコードです。コンパイラは、オフセットを使用して位置独立コードを生成します。多くのプロセッサは、プログラムカウンタ/命令ポインタレジスタからの相対的なアドレス指定がメモリ位置にアクセスすることを可能にする。
あなたのようなグローバル変数持つことができます。
int x ;
をして
main()
{
int y = x + 1 ;
}
コンパイラとリンカユーザが、相対的なプログラムがメモリ内の任意の場所に配置することができますそれに対処することができ、それを参照します。リンク時に相対アドレスを使用してこの問題を引き起こすような
もの:
static int *x = &y ;
あなたのリンカはここに2つの選択肢があります。 Etherはyが固定位置にあることを強制することができ(コードは位置に依存しないことを意味する)、実行時に解決されるアドレスフィックスアップ(通常行われるもの)を含むことができます。後者の場合、プログラムローダーは実行ファイルからフィックスアップを読み取り、読み込まれたときにその変数をアドレスに初期化します。
他のフィックスアップは、共有ライブラリ(別名DLL)を使用している場合に発生します。共有ライブラリは、リンクされているすべてのプログラムを再リンクする必要なく、更新することができます。共有ライブラリにはユニバーサルシンボルのテーブルがあります(つまり、ライブラリ関数の名前など、ライブラリの外側に表示されるシンボル)。ライブラリにコードを追加すると、状況が変わります。
共有ライブラリにリンクすると、実行可能ファイルは共有ライブラリ(通常は関数)内のグローバルへの動的マッピングを定義します。実行時に、ローダーは実行可能ファイル内のこの情報を使用して、参照されている関数のアドレスを検索し、共有ライブラリをロードする場所と一致するようにアドレスを修正します。
- 1. イベントの必要性
- 2. jQueryの.ready()の必要性
- 3. C++のリファレンスの必要性
- 4. "main"(java)の必要性
- 5. OrderedDictionary、ListDictionary、HybridDictionaryの必要性
- 6. Facebookの - 必要性のデフォルトのサムネイル
- 7. exeでの再配置の必要性
- 8. mysqlクエリの静的キャッシュの必要性?
- 9. uksortヘルプ - 単一の必要性のヘルプ
- 10. プロローグ - 事実上の必要性情報
- 11. はしばらく真の必要性:
- 12. 仮想メンバー関数の必要性
- 13. 自動インクリメントIDの必要性
- 14. 初心者の必要性ヘルプ:サーバーエラー
- 15. Zuulプロキシリボン+ listOfServersとロギングの必要性
- 16. htmlのカスタムラジオボタンに必要な属性
- 17. アプリケーションクラスの必要性/用途Android?
- 18. アドオンSDKの必要性場所
- 19. 必要性:メモリオブジェクトデータベース、トランザクション安全性、インデックス、LINQ、永続性なし
- 20. メモリ内データベースの必要性の正当性
- 21. JSF 1.1でコンポーネントのID属性を設定する必要性
- 22. DDの中の<security-role>要素の必要性
- 23. yii2動的に必要なモーダル属性
- 24. Rails - id属性に必要なデータベースインデックス?
- 25. 選択し、ラジオボタンに必要な属性
- 26. 属性値が必要です
- 27. マルチカラムプログラミングの可能性の概要が必要
- 28. アプリケーション要素にはbackupAgent属性が必要ですか?
- 29. SinglethreadExecutorを使用するときのスレッドの安全性の必要性
- 30. NG-必要必要