0

C++ を使用して AIX 5.3 でアプリを作成しています。プロセス仮想メモリの現在のサイズを取得したい。関数を使用getprocs64していますが、このデータでは、svmonショーのように結果を得ることができません。私を助けてください。

ありがとう。

4

1 に答える 1

0

私は自分に適した部分的な解決策を見つけました。

小さなテストアプリを実行しましたが、割り当てられたオブジェクトのサイズとオーバーヘッドのために、スタックにメモリを割り当てると、構造体pi_dvmのメンバーであるが増加することがわかりました(例:)。いいえ、使用済みヒープサイズを計算します。構造体を返す関数を使用する必要があります。構造の2つのフィールドに関心があります:と(このフィールドについては、ここで読むことができます)。いくつかのサンプルコード:procentry64char arr[1024];mallinfo()malloc.hmallinfomallinfousmblksuordblks

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私はこの解決策が誰かを助けるかもしれないことを願っています:)

于 2013-01-30T19:30:34.090 に答える