回 帖 发 新 帖 刷新版面

主题:insufficient virtual memory如何解决??

最近写了一个程序,里面用了一个大的三维数组p(8800,758,5000),但是在运行时出现了这个错误insufficient virtual memory。我在网上查,说这个错误是虚拟内存不够,请问该如何解决??
program get_projection
implicit none
integer i,j,k
integer,allocatable::p(:,:,:)
allocate(p(8800,758,5000))


p=0
do i=1,8800
   do j=1,758
       do k=1,5000
          if(i==j.and.j==k) then
             p(i,j,k)=1
             write(*,*)'test',p,i,j,k
           endif
        enddo
    enddo
enddo

 end

回复列表 (共3个回复)

沙发

虚拟内存不足首先会是你内存不足.

板凳

8800*758*5000 * 4 字节 / 1024 KB / 1024 MB / 1024 = 124GB

你确认你的物理内存 + 虚拟内存有那么大?

3 楼

我现在已经把符合条件的i,j,istep都输出到文件了,但是我需要计算相关函数,也就是说如果第一步出现120,,30,istep(分别对应i,j,istep),看看在istep=2,3,4-----3000时是否依然存在,所以我就将这种存在关系写在了三位矩阵h(i,j,istep)中,因为在后面的程序中,我使用了h作为判断条件,下面的程序就是我想要做的,应该如何改,才能避免使用这个大的三位数组h??请大家帮忙看看,先谢了。
h=0
open (10,file='test.out')
do i=1,99999999
     read(10,*,end=2,err=2) istep,ia,ib
     h(istep,ia,ib)=1
enddo
2 continue
close(10)
do ia=1,30000
    do ib=1,800
         do istep=1,5000
              h(istep)=h(istep,ia,ib)
          enddo
         do ntel=1,nsteps
              if(h(ntel)/=0) then
                进行后面的程序
                -----------------
               endif
         enddo
         enddo
enddo

我来回复

您尚未登录,请登录后再回复。点此登录或注册