vvt 发表于 2017-3-5 09:26 谢谢,也只能如此了。 |
改成动态数组吧,这的确是 windows 的内存限定。 详询:https://software.intel.com/en-us ... indows/topic/303762 |
请问您在主楼说: 在debug x64/win32下编译均顺利通过 意思是:x64下改到 6000000*40 通不过是吗?? 能否给一个“输出窗口”的完整的截图? |
本帖最后由 vvt 于 2017-3-4 09:01 编辑 要使用64位编译器,你必须保证: 1.你的CPU是64位的 2.你的操作系统(windows,linux)是64位的。 3.您按照了64位的编译器。 4.您切换了编译器的编译选项为64位。(这一条很多人忽略) 正如您在主楼说的那样。debug/x64 win32 可以编译。 至于数组大小不能减小,还会慢慢增加。这只是因为你使用了不恰当的数据结构和算法。 有很多关于小内存干大事的实例,比如系数矩阵存储(Sparse matrices)和求解器,比如波前法(front algorithm),比如级联抽样(Cascade decimate)还有数值算法中很常见的思想:分而治之(divide and rule) 没有什么数组是不能减少的。你可以详细看看沙发提供的文章链接。 |
vvt 发表于 2017-3-3 22:39 是的,但我的是64位,16G内存。数组大小不能减小,还会慢慢增加。 |
在我这里,错误提示是:The size of the array dimension is too large, and overflow occurred when computing the array size. 当 Num_All=7000000 时 降低到 6000000,则可以编译和链接(32位) 64位则都可以编译链接。 7,000,000*40*8/1024/1024=2.13G,已经超过了32位内存容许。但没有超过64位的。 建议:合理有效的利用内存。 |
[Fortran] 纯文本查看 复制代码 Program Main Implicit None Integer, Parameter:: Num_All=7000000, Num_List=40,Num_File=15000 Integer I10,I11,I12,J10,K0,Num_Data Character*8 Filename(Num_File) Double Precision Num_Total(Num_All, Num_List) K0=1 Open(Unit=10,File='D:\File.txt') Do I10=1,Num_File Read(10,*)Filename(I10) End Do Close(10) Do I11=1,Num_File Open(Unit=11,file='d:\File\'//Filename(I11)//'.txt') Read(11,*)Num_Data Do I12=1,Num_Data Read(11,*)(Num_Total(K0,J10),J10=1,Num_List) K0=K0+1 End Do Close(11) End Do End Program Main |
捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )
GMT+8, 2024-11-23 20:02