首页 新闻 会员 周边

关于Vector的一个错误!

-1
[待解决问题]

小弟是关于医学影像处理方面的,最近遇到一个程序需要用到一个很大的Vector,结果遇到一个运行时错误,百思不得其解,请各路大神指教!
程序如下:

/////////////////////

include "stdafx.h"

include

using namespace std;
int main()
{
vector vec;
for (long i = 0; i < 512 * 512 * 739 * 4; i++)
{
vec.push_back(512);
}
return 0;
}
/////////////////////

下图是错误代码:




mj120的主页 mj120 | 菜鸟二级 | 园豆:204
提问于:2016-12-09 22:31
< >
分享
所有回答(4)
0

你有这么大的内存么?

Daniel Cai | 园豆:10424 (专家六级) | 2016-12-10 14:25

我用的是图像工作站,64G的内存,40个核心的CPU


支持(0) 反对(0) mj120 | 园豆:204 (菜鸟二级) | 2016-12-10 14:26
0

堆大小不足,修改编译器堆区大小

灵枢 | 园豆:297 (菜鸟二级) | 2016-12-12 11:33

我修改了,但是还是不行,您能说的具体一点吗?


支持(0) 反对(0) mj120 | 园豆:204 (菜鸟二级) | 2016-12-12 11:44

@mj120: 你上面的vector是int类型的吧,那么至少需要 739 * 4M(约2.8G)的堆大小,由于初始申请的vector容量肯定不够,需要多次重新分配,再预估一下程序的其它部分申请的堆大小,堆大小可能需要10个G吧。

所以建议将数据分割成多个vector保存,以减少vector多次扩容的操作。

(如果你代码就是上面那样的话,需要改一下,vector要用new的方式在堆上申请)

支持(0) 反对(0) 灵枢 | 园豆:297 (菜鸟二级) | 2016-12-12 17:03

@灵枢: 我试了,还是不行?很奇怪。


支持(0) 反对(0) mj120 | 园豆:204 (菜鸟二级) | 2016-12-12 17:24

@mj120: 将电脑的虚拟内存改到4G以上吧,vs中项目->属性->连接器->系统->启用大地址设置为是

支持(0) 反对(0) 灵枢 | 园豆:297 (菜鸟二级) | 2016-12-12 18:20

@灵枢: 非常感谢您,按照您说的上述设置,重新运行还是报错。。。,我们现在打算把数据通过文件操作存出来


支持(0) 反对(0) mj120 | 园豆:204 (菜鸟二级) | 2016-12-12 19:13

@mj120: 通过文件把数据操作存起来其实就是数据库的原型,实现文件操作后不妨看看数据库怎么实现

支持(0) 反对(0) Dmego | 园豆:246 (菜鸟二级) | 2016-12-13 18:38

@Dmego: 文件操作,运行太慢了,数据库应该快一些吧,查资料了解一下。


支持(0) 反对(0) mj120 | 园豆:204 (菜鸟二级) | 2016-12-14 09:40
0

按照楼上的说法RAM需要10G的话,你必须确保你在编译的时候选择的是64bits编译器而不是32bits,否则你的程序不能使用超过4GB的内存空间。你可以检查一下。

C4ISR | 园豆:214 (菜鸟二级) | 2017-01-19 09:16
0

我靠,用这么大的内存空间?什么东西要这么大?拆开计算啊,这算到什么时候去,分批次计算啊

_Roy | 园豆:489 (菜鸟二级) | 2018-03-21 16:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册