1

我正在尝试测量最大驻留集大小,我发现您可以使用 getrusage 做到这一点:

当我运行这个

#include <iostream>
#include<vector>
#include <sys/resource.h>

using namespace std;

int main(int argc, char* argv[]){

    int who = RUSAGE_SELF;
    struct rusage usage;
    int ret = -1;

    vector<int> v(1024);

    ret = getrusage(who, &usage);
    if (ret == 0) cout << usage.ru_maxrss << endl;

    return 0;
}

当我评论向量的声明时,我得到了相同的值。

有什么我做错了吗?

谢谢!

4

1 回答 1

2

我对您的代码进行了一些修改,以便对 rusage 结构的 ru_maxrss 元素显示的数据有意义。

这是我的代码

#include <vector>
#include <sys/resource.h>

using namespace std;

int main(int argc, char* argv[]){

    int who = RUSAGE_SELF;
    struct rusage usage;
    int ret = -1;
    long int a,b;

getrusage(who, &usage);
a=usage.ru_maxrss;

cout << "Maximum resident set size before vector allocation   "<<a << endl;
    vector<int> v(10240000);

cout<<"Size of vector v in kilobytes (kB)  "<<(v.size()*sizeof(int))/(1024)<<endl;

    ret = getrusage(who, &usage);

    cout<<"Size of integer data type   "<<sizeof(int)<<endl;
    b=usage.ru_maxrss;

    if (ret == 0) 
cout << "Maximum resident set size after vector allocation  "<<b << endl;
 cout<<"Difference between resident set size before and after vector allocation  "<<b-a<<endl;

    return 0;
}

每次调用getrusage()时,它都会分配一个不同的驻留集大小,该大小比为向量分配的大小大几 kB(大约 600-800)。

上述代码的一些输出如下 在此处输入图像描述

在此处输入图像描述

如果我减少没有。向量中的元素到 1024000 输出如下 在此处输入图像描述

于 2020-03-28T19:01:53.333 回答