我的主要任务是找出进程用于执行不同操作的内存量。我在做某事之前和之后从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;
}
答案 0 :(得分:0)
massif非常擅长追踪内存使用情况。我会与massif-visualizer
一起推荐它关于0,请记住这是 OS 内存。很可能您的代码不是直接从操作系统分配,而是从标准库中的分配器(例如标准C库中的默认malloc
分配器)分配。这些从操作系统中分配大块,然后将它们拆分以满足分配请求。如果现有块中有足够的可用空间来满足分配请求,则不再请求块。如果涉及多个线程,事情会变得更复杂。
比proc
更精细的跟踪要求您告诉我们所使用的编程语言和分配机制。大多数分配器在某处提供这些统计信息。例如,GNU libc有mallinfo
。