我的主要任务是找出一个进程用于执行不同操作的内存量。我在做某事之前和之后从statm文件中读取RSS,然后减去这两个值以了解该进程用于执行某件事的内存量。
例如,在this picture中,您将看到我测量的内存,用于乘以不同大小和密度的稀疏矩阵。请注意,大小为100x100、200x200和300x300的矩阵在RSS增加上没有任何考虑是多么奇怪。我正在做的其他事情我也得到零。我在这里想念什么吗?我是否以错误的方式测量内存?请随意指出您知道的通过代码来测量内存使用情况的任何更好的方法。
我尝试使用rgetusage来使进程达到高峰使用,这似乎是最糟糕的。
编辑:我在C++上编码。我正在使用malloc函数在main之外分配矩阵:
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;
}
最佳答案
在一般情况下,massif非常擅长于跟踪内存使用情况。我建议结合massif-visualizer
关于0,请记住这是 OS 内存。您的代码很可能不是直接从OS而是从标准库中的分配器(例如,标准C库中的默认malloc
分配器)分配。它们从OS分配大块,然后将它们拆分以完成分配请求。如果现有块中有足够的可用空间以满足分配请求,则不再请求任何块。如果涉及多个线程,事情将变得更加复杂。
与proc
中的内容相比,更细粒度的跟踪将要求您告诉我们所使用的编程语言和分配机制。大多数分配器在某处提供这些统计信息。例如,GNU libc具有 mallinfo
。
关于c++ - Linux:/proc/self/statm是否可信任?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36185783/