在程序中获取AIX中进程的虚拟内存大小

时间:2013-01-23 13:14:05

标签: c++ c unix aix virtual-memory

我使用C ++在AIX 5.3上编写应用程序。我想获得当前大小的进程虚拟内存。我使用getprocs64函数,但是对于这些数据,我无法获得svmon显示的结果。 请帮帮我。

感谢。

1 个答案:

答案 0 :(得分:0)

我找到了适合我的部分解决方案。

我运行了一个小型测试应用程序,看到如果我们在堆栈上分配内存(例如:pi_dvm)以获得已分配对象的大小,procentry64结构的成员char arr[1024];将会增加还有一些开销。 Noiw,我们想要计算使用的堆大小。我们应该使用mallinfo()中返回malloc.h结构的mallinfo函数。我们对mallinfo结构的两个字段感兴趣:usmblksuordblks(关于此字段,您可以阅读here)。一些示例代码:

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

P.S。我不知道为什么我们总结pi_tsize(如果有人知道,请告诉我们)。我从pg_top来源得到了这个想法,但是有一个错误,它们将pi_tsize乘以4,但它不正确,因为pi_tsize以字节为单位。 我希望这个解决方案可以帮助某人:)