回 帖 发 新 帖 刷新版面

主题:Fortran好像用链表的不多啊!?

是速度没有数组快么?

回复列表 (共9个回复)

沙发

链表必须没有数组快。不管是 Fortran 还是 C,C++。

数组存储是连续的,取址简单,首地址+长度*相对位置 就可以了。

链表在内存里是不连续存储的。需要逐个指针取址,直到要的那个位置。

链表在 Fortran 里应用少,是因为大家更倾向于用 Fortran 做科学计算,对各种复杂的数据结构的要求不高。

板凳

[quote]链表必须没有数组快。不管是 Fortran 还是 C,C++。

数组存储是连续的,取址简单,首地址+长度*相对位置 就可以了。

链表在内存里是不连续存储的。需要逐个指针取址,直到要的那个位置。

链表在 Fortran 里应用少,是因为大家更倾向于用 Fortran 做科学计算,对各种复杂的数据结构的要求不高。[/quote]

明白了!多谢!
另外数组一般能取多大,就现在一般的主流机型而言?动态数组应该也是连续的内存吧?

3 楼

语法对数组大小没有限制。

但不同平台下的不同编译器,会对数组有一些限制。包括大小和维度都会有。

最后,在小于这些限制的情况下,定义了一些大数组,编译器允许这样做,最后编译成可执行文件,到底能否跑得起来,还与操作系统,硬件内存大小,虚拟内存,显卡,及同时运行的进程等诸多因素有关。

通常来说,windows 32 位系统,数组不应该超过 2GB

动态数组也是连续的存储空间。

4 楼

[quote]语法对数组大小没有限制。

但不同平台下的不同编译器,会对数组有一些限制。包括大小和维度都会有。

最后,在小于这些限制的情况下,定义了一些大数组,编译器允许这样做,最后编译成可执行文件,到底能否跑得起来,还与操作系统,硬件内存大小,虚拟内存,显卡,及同时运行的进程等诸多因素有关。

通常来说,windows 32 位系统,数组不应该超过 2GB

动态数组也是连续的存储空间。[/quote]
一个双精度8个字节 2GB是2E9个字节 个么对应双精度数组来说就是 大小大概是250E6?

5 楼

正如我之前说的那样,这只是理论值。到底数组多少能跑起来,这与很多因素有关。

6 楼

[quote]正如我之前说的那样,这只是理论值。到底数组多少能跑起来,这与很多因素有关。[/quote]
理论值好大啊 呵呵

7 楼

[quote][quote]正如我之前说的那样,这只是理论值。到底数组多少能跑起来,这与很多因素有关。[/quote]
理论值好大啊 呵呵[/quote]

对一维数组来说,确实很大,貌似足够用了。

但是对多维数组来说,就不一定了。

你看这个帖子:

http://bbs.pfan.cn/post-392350.html

8 楼

[quote][quote][quote]正如我之前说的那样,这只是理论值。到底数组多少能跑起来,这与很多因素有关。[/quote]
理论值好大啊 呵呵[/quote]

对一维数组来说,确实很大,貌似足够用了。

但是对多维数组来说,就不一定了。

你看这个帖子:

http://bbs.pfan.cn/post-392350.html
[/quote]

呃。。是哦。。
不过话说当fortran数组占用很大内存的时候,会不会影响其他程序的运行啊?比如说就2g内存的机子?

9 楼

这跟操作系统的资源管理有关。

一般来说,内存,硬盘,CPU资源,都由操作系统管理。Fortran 语法是不管的。

至少在 windows 里,肯定会影响其他进程。

我来回复

您尚未登录,请登录后再回复。点此登录或注册