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