我正在开发一个需要内存效率的程序.我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时,有没有人知道为什么内存使用量增长如此之快?
MSalters是对的,我看不懂!
答案很简单.对我来说,增长似乎是线性的.
你选择的VecSize呈指数级增长.你应该期望MemUsage也会呈指数级增长!(在大的n限制中 - 可能存在小尺寸优化,正如小n的近乎恒定的使用所证明的那样......)
我出于好奇心对数据进行了线性回归,相关系数为1.0--表明VecSize和MemUsage(已发布)之间的关系(最有可能......不会杀死我的统计学家)是线性的.
