内存使用比较

时间:2017-03-14 17:46:02

标签: c++ linux c++11 memory memory-management

我必须通过实验比较同一算法的两种不同实现的内存使用情况。这样做的正确方法是什么?我已经用C ++实现了这两个版本,并希望从linux的命令行中实现。

但是,我很困惑哪种方法可以准确地做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以像这样实施全球newdelete运算符:

#include <stdlib.h>

static size_t curUsage = 0, maxUsage = 0;
void* operator new (size_t size) {
    curUsage += size;
    if(maxUsage < curUsage) maxUsage = curUsage;

    size_t* result = (size_t*)malloc(size + sizeof(size_t));
    *result = size;
    return result + 1;
}
void operator delete (void *pointer) {
    size_t* originalPtr = (size_t*)pointer - 1;
    curUsage -= *originalPtr;
    free(originalPtr);
}

假设您正在使用gcc,则可以通过简单地添加此函数来输出运行结束时的最大内存使用量:

#include <stdio.h>
__attribute__ ((destructor)) void printMaxUsage() {
    printf("max memory usage: %jd bytes\n", maxUsage);
}

这将捕获使用newdelete进行的任何分配。但是,它不会考虑使用的堆栈空间。如果需要考虑这一点(由于深度递归和/或大型局部变量),您必须使用不同的方法。但是,对于表现良好的代码,上述内容应该足够好。

请注意,您不需要对任何其他文件进行任何更改,只需链接这三个功能,即可获得输出。

答案 1 :(得分:0)

你可能喜欢gprof。它通常与类似构建必需的软件包一起安装,因此您可能已经拥有它。 Here是使用它的一些基本说明。

基本上,您必须重新链接您的程序,然后运行gprof。它将生成一个文本报告,您可以对所使用的每种算法进行比较。