Linux:/ proc / self / statm是值得信赖的吗?

时间:2016-03-23 18:17:40

标签: c++ linux memory memory-management

我的主要任务是找出进程用于执行不同操作的内存量。我在做某事之前和之后从statm文件中读取RSS,然后我减去这两个值,以了解该过程用于执行此操作的内存量。

例如,在this picture中,您将看到我测量的内存乘以不同大小和密度的稀疏矩阵。注意大小为100x100,200x200和300x300的矩阵在RSS增加时没有考虑到有多奇怪。我正在做的一堆其他东西我也得到奇怪的零。我在这里错过了什么吗?我用错误的方式测量内存吗?请随意指出您通过一段代码测量内存使用情况的更好方法。

我尝试使用rgetusage,它带来了进程的高峰使用率,看起来最糟糕。

编辑:我在C ++上编码。我使用malloc:

在函数外部分配了一个函数
    int **createMatrix(int N, int M)
{
    int i, **table;
    table = (int**)malloc(N*sizeof(int *));
    for(i = 0 ; i < N ; i++)
        table[i] = (int*)malloc( M*sizeof(int) );
    return table;
}

1 个答案:

答案 0 :(得分:0)

在一般情况下,

massif非常擅长追踪内存使用情况。我会与massif-visualizer

一起推荐它

关于0,请记住这是 OS 内存。很可能您的代码不是直接从操作系统分配,而是从标准库中的分配器(例如标准C库中的默认malloc分配器)分配。这些从操作系统中分配大块,然后将它们拆分以满足分配请求。如果现有块中有足够的可用空间来满足分配请求,则不再请求块。如果涉及多个线程,事情会变得更复杂。

proc更精细的跟踪要求您告诉我们所使用的编程语言和分配机制。大多数分配器在某处提供这些统计信息。例如,GNU libc有mallinfo