65,208
社区成员
发帖
与我相关
我的任务
分享#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<vector<float>> wjz;
vector<float> w;
for (int j=0;j<300;++j)
{
w.resize(1000000);
for (int i=0;i<1000000;++i)
{
w.push_back(i);
}
wjz.push_back(w);
cout<<"current_size:"<<wjz.size()<<endl;
}
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<vector<float>> wjz;
vector<float> w;
for (int j=0;j<300;++j)
{
w.resize(1000000); //调用resize,使得w的size为1000000 个float
for (int i=0;i<1000000;++i)
{
w.push_back(i); //插入1000000 个float
}
//此时w 的size 为 2000000 个float
wjz.push_back(w);
cout<<"current_size:"<<wjz.size()<<endl;
}
return 0;
}
假设程序能够正确运行,那么在运行结束后,wjz 至少需要内存 2000000 * 300 *sizeof(float) = 2.288GB
Win32程序在通常情况下用户内存空间为2G,因此楼主的程序是引发了内存不足的异常。
之所以使用clear 就没问题了,是因为每次向wjz 只插入1000000 个float, 总内存为 1.144G,没有导致内存不足的情况。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<vector<float>> wjz;
vector<float> w;
w.resize(2000000);
for (int i=0;i<1000000;++i)
{
w[i+1000000] = i;
}
for (int j=0;j<300;++j)
{
wjz.push_back(w);
cout<<"current_size:"<<wjz.size()<<endl;
}
return 0;
}