TOP の DATA 列はどういう意味ですか?

TOP の DATA 列はどういう意味ですか?

VIRT、RES、SHR、DATA など、メモリのさまざまな分類の意味を理解しようとしています。最初の 3 つは大体理解していますが、DATA 列については、DATA = データ + スタック サイズ (kb) という公式定義以外、何を意味するのか全くわかりません。これは、メモリの他の 3 つの分類とどのように関係しているのでしょうか。

答え1

によるとhttps://techtalk.intersec.com/2013/07/memory-part-2-understanding-process-memory/:

このフィールドはカーネルによって、VIRT と同じ total_vm と shared_vm の 2 つの変数の差として計算されます。shared_vm は共有メモリの定義を共有するという点で SHR と似ていますが、常駐部分のみをカウントするのではなく、アドレス指定されたすべてのファイル バックアップ メモリの合計が含まれます。さらに、カウントはページ 1 ではなくマッピング レベルで行われるため、shared_vm は変更されたプライベート ファイル バックアップ メモリに対して SHR と同じ繊細さを持ちません。結果として、shared_vm は象限 2、3、4 の合計になります。つまり、total_vm と shared_vm の差は象限 1 の内容とまったく同じです。

DATA 列には、予約されたプライベート匿名メモリの量が含まれています。定義上、プライベート匿名メモリはプログラムに固有のメモリであり、そのデータを保持します。コピーオンライト方式でフォークすることによってのみ共有できます。これにはスタックとヒープが含まれますが、これらに限定されません2。この列には、プログラムによって実際に使用されるメモリの量に関する情報は含まれません。プログラムが一定量のメモリを予約したが、そのメモリは長期間変更されない可能性があることが示されるだけです。

答え2

man ページから:

 s: DATA  --  Data+Stack size (kb)
 The amount of physical memory devoted to other than executable code, also known  as
 the ’data resident set’ size or DRS.

言い換えれば、プログラム(実行可能プログラムではない)の変数データを格納するために使用されるメモリです。

たとえば、メモリ内の配列は変数データです。

またstack size、言葉通り、システムが特定のプログラムを実行するために使用しているスタックのサイズです。スタックは、プログラム/プロセスが呼び出している関数のトレースバックをシステムが保存する場所です。このメトリックはスタックのサイズを示すものであり、スタック自体を示すものではないことに注意してください。

あなたが言及した他のメモリ列についての詳細ここ

答え3

マニュアルページよりここ

The amount of private memory **reserved** by a process.  It is also
known as the Data Resident Set or DRS.  Such memory may not yet
be mapped to physical memory (RES) but will always be included in
the virtual memory (VIRT) amount.

関連情報