lhqlhq6 发表于 2003-12-31 10:55:53

SCIE 发表于 2003-12-31 19:29:04

回复: 【求助】fortran里如何使用动态内存分配

allocate
deallocate

苍山负雪 发表于 2003-12-31 20:11:34

回复: 【求助】fortran里如何使用动态内存分配

可以把common换成module,在module里面定义
你这个 矩阵大小取定了,不用动态分配

如果动态分配的话,声明的时候加allocatable

module mat
   real,dimension(:, :),allocatable::matrix
end module

program
use mat
   ...
allocate(matrix(35000,1250))
   ...
deallocate(matrix)
   ...
end program

不过你这个矩阵真的很大,如果single real, 35000*1250*8/1024/1024=333M,你的内存要足够大才行哦,如果不是所有数据要一次全部处理的话,还是想别的办法吧

galever 发表于 2004-1-1 08:51:45

回复: 回复: 【求助】fortran里如何使用动态内存分配

苍山负雪 wrote:
可以把common换成module,在module里面定义
你这个 矩阵大小取定了,不用动态分配

数组大小取定最好也用动态分配,因为如果用静态数组,编译链接时形成的可执行文件会很大,它已经将数组分配好了,而VF在WINDOWS系统中可以开成的可执行文件不能超过256M,而动态分配就没有这问题了,它是在运行时才开辟数组,并且在NT系统中还可以使用页面内存。

苍山负雪 发表于 2004-1-1 11:17:32

回复: 【求助】fortran里如何使用动态内存分配

哦,原来是这个样子啊 :)
那对于那些用common的程序,是怎么声明动态数组的呢?那个时候可没有allocate啊,看到很多老程序在子程序中开数组的时候只是声明 dimension a(1),没有指定上限,只是由程序运行保证不会数组越界,这个是不是动态数组的等价形式?

苍山负雪 发表于 2004-1-1 21:36:31

回复: 回复: 回复: 【求助】fortran里如何使用动态内存分配

galever wrote:
苍山负雪 wrote:
可以把common换成module,在module里面定义
你这个 矩阵大小取定了,不用动态分配

数组大小取定最好也用动态分配,因为如果用静态数组,编译链接时形成的可执行文件会很大,它已经将数组分配好了,而VF在WINDOWS系统中可以开成的可执行文件不能超过256M,而动态分配就没有这问题了,它是在运行时才开辟数组,并且在NT系统中还可以使用页面内存。

我试了一下子,256M好像不对呀
配置 win2k,cvf6.5, p4 1.7Ghz, 256M ddr, 最多可以开到2G的数组,只是在link时有警告,一样可以运行的,windows自动开虚拟内存。
出来的执行文件可不是什么256M大小,兄台应该是笔误了。

galever 发表于 2004-1-2 06:42:11

回复: 回复: 【求助】fortran里如何使用动态内存分配

苍山负雪 wrote:
哦,原来是这个样子啊 :)
那对于那些用common的程序,是怎么声明动态数组的呢?那个时候可没有allocate啊,看到很多老程序在子程序中开数组的时候只是声明 dimension a(1),没有指定上限,只是由程序运行保证不会数组越界,这个是不是动态数组的等价形式?
这个应该不是动态数组,因为实参数组大小是已经确定了的。

个人认为较小的数组放在有名COMMON中也是可以的,不必转为动态分配的,对于为了扩大求解问题规模而开辟大数组的话,就象上面所说的那样放在MODULE中定义好了。

galever 发表于 2004-1-2 07:10:03

回复: 回复: 回复: 回复: 【求助】fortran里如何使用动态内存分配

苍山负雪 wrote:
galever wrote:
苍山负雪 wrote:
可以把common换成module,在module里面定义
你这个 矩阵大小取定了,不用动态分配

数组大小取定最好也用动态分配,因为如果用静态数组,编译链接时形成的可执行文件会很大,它已经将数组分配好了,而VF在WINDOWS系统中可以开成的可执行文件不能超过256M,而动态分配就没有这问题了,它是在运行时才开辟数组,并且在NT系统中还可以使用页面内存。

我试了一下子,256M好像不对呀
配置 win2k,cvf6.5, p4 1.7Ghz, 256M ddr, 最多可以开到2G的数组,只是在link时有警告,一样可以运行的,windows自动开虚拟内存。
出来的执行文件可不是什么256M大小,兄台应该是笔误了。

的确如你所说,不知道是不是6。5版的VF的功能改进了,我清楚记得原来我编译ADINA时的实型A数组只要开得大于3千万,可执行程序就很大了,程序根本就不能运行,在新系统下还真没注意过。

河海水妖 发表于 2004-4-13 09:12:55

回复: 【求助】fortran里如何使用动态内存分配

我用DIGITAL VISUAL FORTRAN6,在其中一个数组开到3千3百万左右时就说虚拟内存不够了。我系统有1.5G的内存呢,当时从任务管理器看,只用了不到700M的内存(当然,还有其它数组了)。

不知道什么原因,其它朋友有遇到过的?

kuangtq 发表于 2004-4-15 08:43:53

回复: 【求助】fortran里如何使用动态内存分配

参见帖子“可否在module封装的全局变量里开一个动态数组!”
页: [1]
查看完整版本: 【求助】fortran里如何使用动态内存分配