Fortran Coder

查看: 8049|回复: 1
打印 上一主题 下一主题

[讨论] 在普通的计算中,还有必要用动态数组来节省内存吗

[复制链接]

60

帖子

17

主题

0

精华

专家

F 币
454 元
贡献
266 点
跳转到指定楼层
楼主
发表于 2014-11-13 18:58:17 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
记得读研的时候老师给我讲他用F77开发水力模型的时候是如何处理动态数组的问题的。
由于f77没有allocate,为了节省内存并且方便调节,他们那个时候的方法是定义一个比较大的一维数组val(Nmax),然后再在计算的时候,将这个一维数组进行分段,比如说val(10000~20000)之间存储水平速度,val(10001~30001)之间存储竖直速度之类的。经过一次试算之后可以得出内存的利用率。然后调节Nmax,达到省内存的目的。
不得不说这种方法确实很巧妙,老师那套程序内存利用率基本在98%左右的,但是这样做让他的代码几乎变成了天书。在当年那个内存比程序员要贵的年代,这样做确实能够做到只用调节那么几个参数就能定义全部数组的边界的难题。如今有allocate了,定义一个动态数组分分钟的事。
然后在今天我在修改一个2次元水质模型,发现原作者并没有使用动态数组来操作,而是直接用了一个比较大的数来定义数组的边界。顿时心生反感。如此不优雅的写法简直不能忍。然后看了看原作者设定的参数,确实一般的情况基本已经涵盖到了。只要不碰到逗比的case完全能满足绝大部分的计算。
然后我就在想,到底是我太矫情了还是省内存有其他的好处?看了看汇编的讲解,数据全部在寄存器中,按照相同的顺序读取某个数组,那么边界对速度完全没有影响。这样的话,除非是某些大型的计算需要考虑使用动态数组,一般的计算直接定义一个大一点的边界妥妥的。还有必要坚持对待内存能省则省的原则吗?



分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-5-6 03:24

Powered by Tencent X3.4

© 2013-2024 Tencent

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