Linuxでは、すべてのプロセスにアドレススペースがあり、このアドレススペースは、子プロセスが作成されるときにexec()システムコールによって上書きされます。私が知りたいのは、このアドレス空間が何で構成されているかです。アドレス空間にはどのような情報がありますか?
質問する
2915 次
1 に答える
3
アドレス空間は、いくつかのメモリセグメントで構成されています。その中で:
- プログラムの実行可能コードと静的データ
- ヒープ
- スタック
- プログラムの起動時にロードされた共有ライブラリ
- でアドレス空間にマップされた追加のファイル
mmap()
。 - 共有メモリセグメント
- 等...
一部のセグメントは読み取り専用(プログラムの実行可能コード、別名.text
)であり、他のセグメントは書き込み可能(ヒープなど)です。ディスク上のファイルに裏打ちされているものもあれば、純粋にメモリベースのものもあります。
Linuxでは、/proc/<pid>/maps
任意のプロセスIDの内容を調べて、そのプロセスのアドレス空間の一部であるセグメントを確認できます。
を正常に呼び出すとexec()
、現在のプロセスのアドレススペース内のすべてのセグメントのマッピングが解除され、新しい実行可能ファイルは、起動時にまったく新しい基本マッピングのセット(スタック、ヒープ、プログラムコードなど)を取得します。
于 2013-03-18T02:37:16.410 に答える