0

1、実行ファイルには、.text、.data、.bss などのセクションがあります。
2、実行可能ファイルのセクションからマッピングできるプログラム メモリ セグメント (コード、初期化データ、未初期化データ (BSS)、ヒープ、スタック) もあります。

それぞれの上で、私はそれが何であるかを理解できます.セクションはディスクに配置され、セグメントはプログラムのロード中にメモリに配置されます. プログラムが実行を開始すると、初期化されたデータ、BSS、ヒープ セグメントがすべてデータ セグメントに配置されます。次の表に詳細を示します。

この表は、http ://www.tenouk.com/ModuleW.html 表 w.6から参照されます。

表 w.6 私の質問は、メモリ内のアドレス空間セグメントプログラム メモリ セグメントの違いは何ですか?

4

2 に答える 2

1

それらは、メモリ内の同じセグメントを参照する方法が異なるだけです..

  • 「コード」または「テキスト」セグメントは、実行可能ファイルの .text セクションからロードされ、これがロードされるメモリ ページは実行可能としてマークされます。
  • プログラム アドレス空間の「データ」部分には、3 つの異なる論理セクションが含まれます。
    • 初期化されたデータ (実行可能ファイルの .data セクションからロード)
    • 初期化されていないデータ - 実行可能ファイルの .bss セクションに割り当てられるサイズが記録されていますが、実際のコンテンツは記録されていません (結局、初期化されていません!)
    • そして、動的に割り当てられたデータ (ヒープ) - プログラムの実行時に割り当てられるため、実行可能ファイルに一致するセクションがない、または必要ありません。これらすべてのデータ セクションのメモリ ページは読み取り/書き込み可能であり、理論的には非-実行可能です。
  • 「スタック」部分 - 基本的にデータ型セクションに似ていますが、プログラムの実行において特別な意味/目的があります。また、実行可能ファイルのセクションによってサポートされていません。

これらのセクション/セグメントが処理される正確な方法は、明らかに実装固有です。ファイルのレイアウトは、使用される特定の実行可能形式とリンカーに依存し、メモリ内のプログラムのレイアウトは、使用される実行可能形式と使用されるリンカーに依存します。 OSローダー。この例として、PE ファイル形式に関するこの議論 ( http://msdn.microsoft.com/en-us/library/ms809762.aspx ) によると、.bss セクションを削除するために使用される Borland リンカーの 1 つ実行可能ファイルを作成し、代わりに .data セクションと組み合わせます。使用される OS/リンカー/実行可能形式のさまざまなフレーバーに応じて、同様の変数の例がたくさんあると思います。

于 2013-02-07T12:19:50.093 に答える
0

記憶に違いはありません。

ただし、通常、キャッシュは分離されています。また、仮想メモリ テーブルでは、コード セグメントがそのようにマークされているため、コード セグメントではないものを実行しようとすると、プログラムがクラッシュします。

これは実際にはプラットフォームごとに異なることに注意してください。

于 2013-02-07T03:15:18.310 に答える