使用std :: vector的指数内存消耗增长

Ary*_* Mz 2 c++ memory vector

我正在开发一个需要内存效率的程序.我std::vector在我的程序中用来存储大量元素.但是,我注意到当选择大的元素数时,程序的内存大小呈指数级增长.例如,我写了以下代码:

#include <iostream>
#include <vector>
using namespace std;

int main(){
    int vecSize;
    cin >> vecSize;
    vector<double> a(vecSize);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后我使用gnu time命令监视内存消耗,如下所示:

/usr/bin/time -f "Mem: %M" a.out
Run Code Online (Sandbox Code Playgroud)

这是我为不同的矢量大小得到的内存结果:

VecSize       MemUsage
10:           4720 KB
100:          4720 KB
1000:         4736 KB
10000:        5024 KB
100000:       7744 KB
1000000:      35872 KB
10000000:     317120 KB
Run Code Online (Sandbox Code Playgroud)

当选择的元素数量超过100000时,有没有人知道为什么内存使用量增长如此之快?

dru*_*nly 8

MSalters是对的,我看不懂!

答案很简单.对我来说,增长似乎是线性的.

你选择的VecSize呈指数级增长.你应该期望MemUsage也会呈指数级增长!(在大的n限制中 - 可能存在小尺寸优化,正如小n的近乎恒定的使用所证明的那样......)

我出于好奇心对数据进行了线性回归,相关系数为1.0--表明VecSize和MemUsage(已发布)之间的关系(最有可能......不会杀死我的统计学家)是线性的.

回归! :)

  • "正式"哈!这是正式的,只要stats.stackexchange.com没有人来:) (2认同)