Inter-process-communication-process-image
提供:Dev Guides
プロセス画像
プロセスとその親プロセスの基本情報を取得する方法を確認したので、プロセス/プログラム情報の詳細を確認します。
プロセスイメージとは正確には何ですか? プロセスイメージは、プログラムの実行中に必要な実行可能ファイルです。 この画像は通常、次のセクションが含まれています-
- コードセグメントまたはテキストセグメント
- データセグメント
- スタックセグメント
- ヒープセグメント
以下は、プロセスイメージの図的表現です。
- コードセグメント*は、オブジェクトファイルまたはプログラムの仮想アドレス空間の一部であり、実行可能な命令で構成されています。 これは通常、読み取り専用のデータセグメントであり、固定サイズです。
データセグメントには2つのタイプがあります。
- 初期化済み
- 初期化されていません
- 初期化されたデータセグメント*は、オブジェクトファイルまたはプログラムの仮想アドレス空間の一部であり、初期化された静的およびグローバル変数で構成されています。
- 初期化されていないデータセグメント*は、オブジェクトファイルまたはプログラムの仮想アドレス空間の一部であり、初期化されていない静的およびグローバル変数で構成されます。 初期化されていないデータセグメントは、BSS(Block Started by Symbol)セグメントとも呼ばれます。
実行時に変数の値が変更される可能性があるため、*データセグメント*は読み書き可能です。 このセグメントのサイズも固定されています。
- スタックセグメント*は、自動変数と関数パラメーターに割り当てられるメモリ領域です。 また、関数呼び出しの実行中に戻りアドレスを保存します。 スタックは、LIFO(Last-In-First-Out)メカニズムを使用して、ローカル変数または自動変数、関数パラメーターを保存し、次のアドレスまたは戻りアドレスを保存します。 戻りアドレスは、関数実行の完了後に戻るアドレスを指します。 このセグメントサイズは、ローカル変数、関数パラメーター、および関数呼び出しごとに可変です。 このセグメントは、上位アドレスから下位アドレスに成長します。
- ヒープセグメント*は、malloc()およびcalloc()呼び出しなどの動的メモリストレージに割り当てられるメモリ領域です。 このセグメントサイズも、ユーザー割り当てごとに可変です。 このセグメントは、低いアドレスから高いアドレスに成長します。
ここで、いくつかのサンプルプログラムでセグメント(データおよびbssセグメント)のサイズがどのように変化するかを確認しましょう。 セグメントサイズは、コマンド「size」を実行することで認識されます。
初期プログラム
ファイル:segment_size1.c
次のプログラムでは、初期化されていない静的変数が追加されます。 これは、未初期化セグメント(BSS)サイズが4バイト増加することを意味します。 注-Linuxオペレーティングシステムでは、intのサイズは4バイトです。 整数データ型のサイズは、コンパイラとオペレーティングシステムのサポートによって異なります。
ファイル:segment_size2.c
次のプログラムでは、初期化された静的変数が追加されます。 これは、初期化セグメント(DATA)サイズが4バイト増加することを意味します。
ファイル:segment_size3.c
次のプログラムでは、初期化されたグローバル変数が追加されます。 これは、初期化セグメント(DATA)サイズが4バイト増加することを意味します。
ファイル:segment_size4.c
次のプログラムでは、初期化されていないグローバル変数が追加されます。 これは、未初期化セグメント(BSS)サイズが4バイト増加することを意味します。