C++ を使用して AIX 5.3 でアプリを作成しています。プロセス仮想メモリの現在のサイズを取得したい。関数を使用getprocs64
していますが、このデータでは、svmon
ショーのように結果を得ることができません。私を助けてください。
ありがとう。
C++ を使用して AIX 5.3 でアプリを作成しています。プロセス仮想メモリの現在のサイズを取得したい。関数を使用getprocs64
していますが、このデータでは、svmon
ショーのように結果を得ることができません。私を助けてください。
ありがとう。
私は自分に適した部分的な解決策を見つけました。
小さなテストアプリを実行しましたが、割り当てられたオブジェクトのサイズとオーバーヘッドのために、スタックにメモリを割り当てると、構造体pi_dvm
のメンバーであるが増加することがわかりました(例:)。いいえ、使用済みヒープサイズを計算します。構造体を返す関数を使用する必要があります。構造の2つのフィールドに関心があります:と(このフィールドについては、ここで読むことができます)。いくつかのサンプルコード:procentry64
char arr[1024];
mallinfo()
malloc.h
mallinfo
mallinfo
usmblks
uordblks
pid_t pid = getpid();
struct procentry64 p_info;
if (getprocs64(&p_info, sizeof(p_info), NULL, 0, &pid, 1) < 0) {
printf("Error!");
}
proc_size = p_info.pi_dvm*getpagesize() + p_info.pi_tsize;
struct mallinfo m = mallinfo();
proc_size += m.usmblks + m.uordblks;
return proc_size; // proc_size in bytes
PSなぜ私たちが合計するのかわかりませんpi_tsize
(誰かが知っているなら、教えてください)。このアイデアはpg_topソースから取得しますが、バグがあり、4が乗算されますが、バイト単位pi_tsize
であるため、正しくありません。pi_tsize
私はこの解決策が誰かを助けるかもしれないことを願っています:)