Fortran Coder

查看: 16454|回复: 11
打印 上一主题 下一主题

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

[复制链接]

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

楼主
发表于 2015-12-5 20:24:00 | 显示全部楼层
楼主的问题已在QQ群讨论解决:
1.楼主使用的64位编译器,一个地址占8字节,而非楼主计算的4字节
2.由于Fortran的可分配数组(指针同),除了记录数组的首地址(8字节)之外,还记录数组的维度,每个维度的上限 / 下限 / 间距。因此,这些结构(或称数组描述符 descriptor ) 占用约32字节

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2015-12-5 22:59:17 | 显示全部楼层
如果把变量和结构都写入 C 定义,那么相关的计算也必须写入 C,因为可分配数组和fortran指针,都是特殊的数据结构。
fortran的指针包含更丰富的内容,以至于它更安全,不容易越界或指向数组之外。当然,它是以牺牲内存为代价的。
通常来说,较大的数组,但数组个数不多,那么牺牲一点内存来存储这些额外的信息(维度/上下限)是值得的。

像楼主这种1800万个可分配数组,毕竟是较少的情况。

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

板凳
发表于 2015-12-6 10:11:35 | 显示全部楼层
从数据库取数,必然比从内存取数会慢很多

时间(执行效率)和空间(内存大小)总是不可兼得,两难相权取其轻吧。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-6 15:33

Powered by Tencent X3.4

© 2013-2024 Tencent

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