gpt4 book ai didi

c++ - Linux getrusage() maxrss 最大驻留集大小不随分配增加 (C++)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:18 26 4
gpt4 key购买 nike

我正在尝试使用 getrusage(.)和最大驻留集大小 (maxrss) 以检查内存泄漏。但是,当我故意尝试制造泄漏时,maxrss 不会改变。也许我对 maxrss 的理解还不够深入。这是代码:

#include <iostream>
#include <sys/time.h>
#include <sys/resource.h>
using namespace std;
int main() {
struct rusage r_usage;
getrusage(RUSAGE_SELF, &r_usage);
cout << r_usage.ru_maxrss << "kb\n";
cout << "Allocating...\n";
int a = 100000; // have tried range of numbers
int* memleaktest = new int[a]; // class member
if(!memleaktest)
cout << "Allocation failed";
getrusage(RUSAGE_SELF, &r_usage);
cout << "after allocation " << r_usage.ru_maxrss << "kb\n";
return 0;
}

我在 allocatoin (~15000kb) 之后得到了完全相同的值。在 Ubuntu x86 上。

最佳答案

分配的内存在您访问它之前实际上并没有被映射。如果你initialize具有值的数组,Linux 被迫实际分配和映射新页面:

#include <iostream>
#include <sys/time.h>
#include <sys/resource.h>
using namespace std;
int main() {
struct rusage r_usage;
getrusage(RUSAGE_SELF, &r_usage);
cout << r_usage.ru_maxrss << "kb\n";
cout << "Allocating...\n";
int a = 1000000; // Sufficiently large
int* memleaktest = new int[a](); // Initialized to zero
if(!memleaktest)
cout << "Allocation failed";
getrusage(RUSAGE_SELF, &r_usage);
cout << "after allocation " << r_usage.ru_maxrss << "kb\n";
return 0;
}

在我的系统上,这导致:

4900kb
Allocating...
after allocation 6844kb

请注意,编译器优化可能决定数组未使用或应预先分配,因此最好在没有它们的情况下进行编译或以无法优化的方式重写测试用例。

关于c++ - Linux getrusage() maxrss 最大驻留集大小不随分配增加 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51291429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com