Fortran Coder

楼主: jovan
打印 上一主题 下一主题

[编译器] 自定义类型的内存占用巨大

[复制链接]

7

帖子

2

主题

0

精华

入门

F 币
33 元
贡献
19 点
跳转到指定楼层
楼主
发表于 2015-12-5 18:53:18 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
想要定义一个数据类型,希望能中间包含一个可变大小的数组,写了代码如下
[Fortran] 纯文本查看 复制代码
type cell
integer :: fn
integer, dimension(:), allocatable ::nd
end type cell
type(cell), dimension(:), allocatable ::elem
allocate(elem(10000))

只是给结构体elem赋了内存,维数10000,没有给nd赋内存,但是在进程管理器里查看已经占用了几十倍于10000*4字节的内存,而且再给nd赋内存并赋值后,内存进一步增加。
原以为自定义结构体中不能包含可变大小的数组,于是修改代码为:
[Fortran] 纯文本查看 复制代码
type cell
integer :: fn
integer, dimension(:), pointer ::nd
end type cell
type(cell), dimension(:), allocatable ::elem
allocate(elem(10000))

这样给结构体elem赋内存后,内存占用无异常,但当每一个指针elem(i)%nd指向一个大小不同的数组后,内存占用出现了同样的问题,占用了几十倍于指向的数组的大小,请问如何解决?谢谢
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

7

帖子

2

主题

0

精华

入门

F 币
33 元
贡献
19 点
沙发
 楼主| 发表于 2015-12-5 19:43:39 | 显示全部楼层
本帖最后由 jovan 于 2015-12-5 19:45 编辑

操作系统是:Win7编译器:Intel Visual Studio2010
编译环境:x64 Release
完整代码太长了,没法贴,我在一些可疑的地方赋内存之后pause,发现这个结构体一赋内存,内存占用就狂飙

7

帖子

2

主题

0

精华

入门

F 币
33 元
贡献
19 点
板凳
 楼主| 发表于 2015-12-6 10:08:54 | 显示全部楼层
pasuka 发表于 2015-12-6 09:37
长度是1800w的话,为啥不考虑上SQL数据库或者Hadoop这类大数据处理平台,再不济的话,也得整个out-of-cor ...

这个是流体计算网格的前处理程序,以前处理小网格没有啥问题,现在算大网格出了这问题,回头我换个平台试试看,要还是不行就考虑改程序,数据库完全不懂...

7

帖子

2

主题

0

精华

入门

F 币
33 元
贡献
19 点
地板
 楼主| 发表于 2015-12-9 11:47:25 | 显示全部楼层
是这样的,以之前的数据结构写的话,多余的内存占用不可避免,而且比数据本身需要占用的内存还大,造成了很大的浪费,谢谢你的提醒
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-3 12:26

Powered by Tencent X3.4

© 2013-2024 Tencent

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