【问题标题】:get virtual memory size of process in AIX in program在程序中获取 AIX 中进程的虚拟内存大小
【发布时间】:2013-01-06 23:37:02
【问题描述】:

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    我运行了一个小型测试应用程序,发现procentry64 结构的成员pi_dvm 如果我们在堆栈上分配内存(例如:char arr[1024];),将增加分配对象的大小和一些开销。现在,我们要计算使用的堆大小。我们应该使用来自malloc.hmallinfo() 函数,它返回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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-29
      • 2012-07-03
      • 2013-12-13
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      相关资源
      最近更新 更多