小弟是关于医学影像处理方面的,最近遇到一个程序需要用到一个很大的Vector,结果遇到一个运行时错误,百思不得其解,请各路大神指教!
程序如下:
/////////////////////
using namespace std;
int main()
{
vector
for (long i = 0; i < 512 * 512 * 739 * 4; i++)
{
vec.push_back(512);
}
return 0;
}
/////////////////////
下图是错误代码:
你有这么大的内存么?
我用的是图像工作站,64G的内存,40个核心的CPU
堆大小不足,修改编译器堆区大小
我修改了,但是还是不行,您能说的具体一点吗?
@mj120: 你上面的vector是int类型的吧,那么至少需要 739 * 4M(约2.8G)的堆大小,由于初始申请的vector容量肯定不够,需要多次重新分配,再预估一下程序的其它部分申请的堆大小,堆大小可能需要10个G吧。
所以建议将数据分割成多个vector保存,以减少vector多次扩容的操作。
(如果你代码就是上面那样的话,需要改一下,vector要用new的方式在堆上申请)
@灵枢: 我试了,还是不行?很奇怪。
@mj120: 将电脑的虚拟内存改到4G以上吧,vs中项目->属性->连接器->系统->启用大地址设置为是
@灵枢: 非常感谢您,按照您说的上述设置,重新运行还是报错。。。,我们现在打算把数据通过文件操作存出来
@mj120: 通过文件把数据操作存起来其实就是数据库的原型,实现文件操作后不妨看看数据库怎么实现
@Dmego: 文件操作,运行太慢了,数据库应该快一些吧,查资料了解一下。
按照楼上的说法RAM需要10G的话,你必须确保你在编译的时候选择的是64bits编译器而不是32bits,否则你的程序不能使用超过4GB的内存空间。你可以检查一下。
我靠,用这么大的内存空间?什么东西要这么大?拆开计算啊,这算到什么时候去,分批次计算啊