我使用 C++ 在 AIX 5.3 上编写应用程序。我想获取进程虚拟内存的当前大小。我使用getprocs64
函数,但是有了这些数据,我无法得到如图svmon
所示的结果。请帮我。
谢谢。
我使用 C++ 在 AIX 5.3 上编写应用程序。我想获取进程虚拟内存的当前大小。我使用getprocs64
函数,但是有了这些数据,我无法得到如图svmon
所示的结果。请帮我。
谢谢。
我找到了适合我的部分解决方案。
我运行了一个小型测试应用程序,发现如果我们在堆栈上分配内存(例如:)来分配对象的大小和一些开销pi_dvm
,结构的成员将会增加。现在,我们要计算使用的堆大小。我们应该使用返回结构的函数。我们对结构的两个领域感兴趣:和(关于这个领域,你可以在这里阅读)。一些示例代码: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来源得到这个想法,但是有一个错误,它们乘以pi_tsize
4,但它是不正确的,因为pi_tsize
是以字节为单位的。我希望这个解决方案可以帮助某人:)