アドレス空間でプロセスのヒープサイズを計算する方法は?

アドレス空間でプロセスのヒープサイズを計算する方法は?

私のプロセスで使用するヒープサイズを見つけようとしています。私がやった

fgrep '[stack]' /proc/pid/maps そして得た

00a00000-45937000 rw-p 00000000 00:00 0 [heap]

今ヒープのサイズを計算したいと思います。だから私はそうでした。

(45937000 - 00a00000 ) = 44F37000

10進数に変換してください1156804608。次にGB = 1156804608/(1000*1000*1000) = 1.1568 GB

私が正しいことをしているのでしょうか?

答え1

はい、終了境界アドレスから開始境界アドレスを減算すると、その特定のプロセスのヒープサイズがわかります。

シェルで計算を実行できます。

hsize=$(( 0x45937000 - 0x00a00000 + 1 ))
printf 'heap is %d bytes (about %d MiB)\n' \
    "$hsize" "$(( hsize / 1024 / 1024 ))"

GNUを使用してPID "ファイル"をawk解析します(GNUは10進数ではなく整数を認識できる必要があります):maps$pidawk-n

awk -n -F '[- ]' '/\[heap\]/ {
    h = "0x" $2 - "0x" $1 + 1
    printf("heap is %d bytes (%.2f MiB)\n", h, h/1024/1024) }' /proc/$pid/maps

この関連質問も参照してください。Linuxで/proc/$pid/memを読む方法は?

ServerFaultに関するこの質問は、実行したい操作に応じて役に立ちます。Linuxプロセスのメモリをファイルにダンプする

関連情報