生成的释放数组内存太大,内存不够用该怎么办

2001年4月 VC/MFC大版内专家分月排行榜第三
匿名用户不能发表回复!|2014年 总版技术专家分年内排行榜第二
2013年 总版技术专家分年内排行榜第三
2015年9月 VC/MFC大版内专家分月排行榜第二2015年7月 硬件/嵌入开发大版内专家分月排行榜第二2014年5月 VC/MFC大版内专家分月排行榜第二2014年3月 VC/MFC大版内专家分月排行榜第二2013年10月 VB大版内专家分月排行榜第二2013年7月 VB大版内专家分月排行榜第二2012年5月 VB大版内专家分月排行榜第二2012年4月 VB大版内专家分月排行榜第二2012年2月 VB大版内专家分月排行榜第二2011年11月 VB大版内专家分月排行榜第二
2015年11月 VC/MFC大版内专家分月排行榜第三2015年6月 VC/MFC大版内专家分月排行榜第三2015年2月 VC/MFC大版内专家分月排行榜第三2014年1月 VC/MFC大版内专家分月排行榜第三2012年3月 VB大版内专家分月排行榜第三2011年12月 VB大版内专家分月排行榜第三2011年10月 VB大版内专家分月排行榜第三
2016年2月 C/C++大版内专家分月排行榜第三2016年1月 C/C++大版内专家分月排行榜第三
2016年2月 C/C++大版内专家分月排行榜第三2016年1月 C/C++大版内专家分月排行榜第三
匿名用户不能发表回复!|定义的数组太大,超过了可用内存空间。怎么解决?_百度知道
定义的数组太大,超过了可用内存空间。怎么解决?
我有更好的答案
input sizeof data :&);scanf(&%d& , &n );p=malloc( n * sizeof(int) );if ( p == NULL ){printf (&quot。曾经有人问过这类问题,最后解决的方法为动态分配数组;)。根据实际数据量 进行 malloc( size ) ;int main(){int *p=NULL ;int n=0;printf(&malloc error\n&quot..;return -1;},就没有办法用得了那么大吗?如果实际数据就需要这么大..free(p);return 0
来自:求助得到的回答
为您推荐:
其他类似问题
内存的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。PHP数组内存耗用太多问题的解决方法
转载 & & 作者:
一般来说,PHP数组的内存利用率只有 1/10, 也就是说,一个在C语言里面100M 内存的数组,在PHP里面就要1G。特别是在PHP作为后台服务器的系统中,经常会出现内存耗费太大的问题。
因为这个是语言的问题,常规方案比较难以解决。下面是一种通过string 解决的方案。
代码如下: $total = 100000; $double = ""; for ($i = 0; $i & $ $i++) { $double .= pack("d", $i + 0.1); } for ($i = 0; $i & $ $i++) { unpack("@" . ($i * 8) . "/d", $double); }
这个例子用一个string 保存一个double 的数组。然后在使用的时候unpack出来。 当然,这会影响性能。要看具体的需求。 比如这样的情况下: 你有10个数组,每个数组10M (1百万数据左右),那么十个要花费 100M内存。 再加上10个人并发的话,内存就会严重不够了。 然后,在10个数组,不是每次都同时使用的。你可以,把他们保存成string 然后,在使用的时候,unpack某一个string变成一个数组。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具查看: 723|回复: 5
计算中,大数组导致的内存不足
惯用编译器:Intel Visual Fortran for Windows
帖子主题精华
编写了一个程序,其中有12个四维数组,比如:u(6,100,100,204),v(6,100,100,204)等。因为计算需要,我把数组改写成了u(6,200,200,204)。编译时出现这个错误LNK1248: image size ('size') exceeds maximum allowable size ()& && && &&&按照网上的一些做法,把原本为静态数组的数组,改为了动态数组,但是会出现图中的错误
我刚才看了下论坛里相关的问题,里面的解决办法对我这个没有太大的帮助。
QQ截图41.png (49.6 KB, 下载次数: 1)
18:13 上传
有几个问题请教一下:
& & 1.电脑为WIN764位系统+IVF2013,理论上能开的最大的数组有多大?
& & 2.数组的数量和大小,对内存的要求高吗?(8G内存)
下面为程序的一部分,这个问题困扰很久。希望大家能提供些帮助,谢谢!
[Fortran] 纯文本查看 复制代码module sanguan
implicit none
DOUBLE PRECISION,allocatable::u(:,:,:,:),f(:,:,:,:),
g(:,:,:,:),h(:,:,:,:)
DOUBLE PRECISION,allocatable :: ux(:,:,:,:),uy(:,:,:,:),
uz(:,:,:,:),fx(:,:,:,:), gy(:,:,:,:),
hz(:,:,:,:)
DOUBLE PRECISION,allocatable :: ut(:,:,:,:),ft(:,:,:,:),
gt(:,:,:,:),ht(:,:,:,:)
end module
program ex001
use sanguan
IMPLICIT DOUBLE PRECISION (a-h,o-z)
PARAMETER (ijn=6,ixmax=200,jymax=200,kzmax=204)
common /commu01/ timec,phyin(40000,5),nin
common /par01/ gam,ak,EdRu,qin
common /out02/ timemax,ntime,nprint
common /out00/ iop
common /out10/ dx,dy,dz,dt,imax,jmax,kmax,
ib1,ib2,jb1,jb2,kb
common /out21/ a(ijn,ijn),b(ijn,ijn),c(ijn,ijn)
common /out22/ uxij(2,ijn), uyij(2,ijn), uzij(2,ijn),
udxij(2,ijn),udyij(2,ijn),udzij(2,ijn)
common /out23/ qijk(6,ijn)
common /out24/ sita(8,ijn),wwww(8,ijn),
uxc(8,ijn),uyc(8,ijn),uzc(8,ijn)
common /out25/ xycir5(3,2),ncir(3),mcircle(3,ixmax,2)
common /out26/ nwork,njet(3),phycir(5,ijn)
common /out27/ dtin
common /output02/ tjet(3)
allocate(u(6,200,200,204))
allocate(f(6,200,200,204))
allocate(g(6,200,200,204))
allocate(h(6,200,200,204))
allocate(ux(6,200,200,204))
allocate(uy(6,200,200,204))
allocate(uz(6,200,200,204))
allocate(fx(6,200,200,204))
allocate(gy(6,200,200,204))
allocate(hz(6,200,200,204))
allocate(ut(6,200,200,204))
allocate(ft(6,200,200,204))
allocate(gt(6,200,200,204))
allocate(ht(6,200,200,204))
F 币394 元
贡献148 点
惯用编译器:Intel Visual Fortran for Windows
帖子主题精华
F 币394 元
贡献148 点
语法没有对数组大小进行限制,而限制来源于具体的操作环境。
6*200*200*204 =
因为是双精度的,每个数据8字节,所以一共
字节 = 382500 KB = 373.5 MB
12个这样的数组,一共 4482.4 MB,也就是 4.5GB
32位系统可以最大的寻址是 2**32 = 4GB,实际上 Windows 限定为 2GB,除去操作系统本身之外,实际可用的内存只有1.2GB左右。
64位系统则更大一些,但这需要你的编译器也是64位的。
具体可利用的内存还受其他因素影响。
楼主可尝试使用64位编译器编译,并开启大数组地址支持。或者考虑在算法上修改,提高内存重复使用率。
惯用编译器:Intel Visual Fortran for Windows
帖子主题精华
语法没有对数组大小进行限制,而限制来源于具体的操作环境。
6*200*200*204 =
果然是高手,解释的非常清楚,谢谢。我安装的是visual studio 2010版和IVF 2013. 下载的时候都是下载的64位的。但是从《Fortran 95 程序设计》【彭国伦】一书中P148页里面的小程序来计算我的电脑能承受2G的数组,从上面你的分析来看,离4.5G的需求,确实不够。本身是8G内存,如果按照你的建议。我在安装了合适的64位编译器之后,再开启最大数组地址支持,应该可以实现。
但是我现在的问题是:
1. 如何确定自己正确安装了64位编译器?
2.怎么开启最大数组地址支持?
农村外出务工人员
F 币259 元
贡献136 点
惯用编译器:Silverfrost Ftn95
帖子主题精华
农村外出务工人员
F 币259 元
贡献136 点
IVF 的 32 位和 64位是在一起安装的。即便你安装了,也需要切换到64位来编译。
你可以在工程属性之类的地方找到。
这些问题,都可参考这个帖子:
惯用编译器:Intel Visual Fortran for Windows
帖子主题精华
IVF 的 32 位和 64位是在一起安装的。即便你安装了,也需要切换到64位来编译。
你可以在工程属性之类的地 ...
谢谢,按照上面的方法。暂时解决了目前这个大小的数值。不过后面还想再加大数组,是不是得考虑算法改进,或者搞并行计算了。。。
F 币394 元
贡献148 点
惯用编译器:Intel Visual Fortran for Windows
帖子主题精华
F 币394 元
贡献148 点
任何时候,算法改进都是需要考虑的。而不是硬件条件不够了再考虑。
颁发给注册后积极发言的新人
颁发给对本站有突出贡献的朋友
颁发给本站版主和管理
颁发给在娱乐版上传了真实照片的男性网友
颁发给为Fcode网站捐赠的网友
颁发给完成“有规有矩”任务的网友
颁发给论坛注册1年以上的网友
颁发给发帖量超过一定数量的坛友
Powered by

我要回帖

更多关于 二维数组动态分配内存 的文章

 

随机推荐