找回密码
 注册
Simdroid-非首页
查看: 316|回复: 9

[3. Fortran] 【求助】fortran里如何使用动态内存分配

[复制链接]
lhqlhq6 该用户已被删除
发表于 2003-12-31 10:55:53 | 显示全部楼层 |阅读模式 来自 辽宁沈阳
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2003-12-31 19:29:04 | 显示全部楼层 来自 天津

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

Simdroid开发平台
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,你的内存要足够大才行哦,如果不是所有数据要一次全部处理的话,还是想别的办法吧
发表于 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:
[quote]苍山负雪 wrote:
可以把common换成module,在module里面定义
你这个 矩阵大小取定了,不用动态分配
  

数组大小取定最好也用动态分配,因为如果用静态数组,编译链接时形成的可执行文件会很大,它已经将数组分配好了,而VF在WINDOWS系统中可以开成的可执行文件不能超过256M,而动态分配就没有这问题了,它是在运行时才开辟数组,并且在NT系统中还可以使用页面内存。 [/quote]
  
我试了一下子,256M好像不对呀
配置 win2k,cvf6.5, p4 1.7Ghz, 256M ddr, 最多可以开到2G的数组,只是在link时有警告,一样可以运行的,windows自动开虚拟内存。
出来的执行文件可不是什么256M大小,兄台应该是笔误了。
发表于 2004-1-2 06:42:11 | 显示全部楼层 来自 陕西西安

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

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

这个应该不是动态数组,因为实参数组大小是已经确定了的。
  
个人认为较小的数组放在有名COMMON中也是可以的,不必转为动态分配的,对于为了扩大求解问题规模而开辟大数组的话,就象上面所说的那样放在MODULE中定义好了。
发表于 2004-1-2 07:10:03 | 显示全部楼层 来自 陕西西安

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

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

数组大小取定最好也用动态分配,因为如果用静态数组,编译链接时形成的可执行文件会很大,它已经将数组分配好了,而VF在WINDOWS系统中可以开成的可执行文件不能超过256M,而动态分配就没有这问题了,它是在运行时才开辟数组,并且在NT系统中还可以使用页面内存。 [/quote]
  
我试了一下子,256M好像不对呀
配置 win2k,cvf6.5, p4 1.7Ghz, 256M ddr, 最多可以开到2G的数组,只是在link时有警告,一样可以运行的,windows自动开虚拟内存。
出来的执行文件可不是什么256M大小,兄台应该是笔误了。 [/quote]
  
的确如你所说,不知道是不是6。5版的VF的功能改进了,我清楚记得原来我编译ADINA时的实型A数组只要开得大于3千万,可执行程序就很大了,程序根本就不能运行,在新系统下还真没注意过。
发表于 2004-4-13 09:12:55 | 显示全部楼层 来自 江苏南京

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

我用DIGITAL VISUAL FORTRAN6,在其中一个数组开到3千3百万左右时就说虚拟内存不够了。我系统有1.5G的内存呢,当时从任务管理器看,只用了不到700M的内存(当然,还有其它数组了)。
  
不知道什么原因,其它朋友有遇到过的?
发表于 2004-4-15 08:43:53 | 显示全部楼层 来自 江西南昌

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

参见帖子“可否在module封装的全局变量里开一个动态数组!  ”
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-2 03:42 , Processed in 0.039087 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表