主题:Fortran好像用链表的不多啊!?
zrydd
[专家分:0] 发布于 2012-08-31 14:14:00
是速度没有数组快么?
回复列表 (共9个回复)
沙发
臭石头雪球 [专家分:23030] 发布于 2012-08-31 14:18:00
链表必须没有数组快。不管是 Fortran 还是 C,C++。
数组存储是连续的,取址简单,首地址+长度*相对位置 就可以了。
链表在内存里是不连续存储的。需要逐个指针取址,直到要的那个位置。
链表在 Fortran 里应用少,是因为大家更倾向于用 Fortran 做科学计算,对各种复杂的数据结构的要求不高。
板凳
zrydd [专家分:0] 发布于 2012-08-31 15:24:00
[quote]链表必须没有数组快。不管是 Fortran 还是 C,C++。
数组存储是连续的,取址简单,首地址+长度*相对位置 就可以了。
链表在内存里是不连续存储的。需要逐个指针取址,直到要的那个位置。
链表在 Fortran 里应用少,是因为大家更倾向于用 Fortran 做科学计算,对各种复杂的数据结构的要求不高。[/quote]
明白了!多谢!
另外数组一般能取多大,就现在一般的主流机型而言?动态数组应该也是连续的内存吧?
3 楼
臭石头雪球 [专家分:23030] 发布于 2012-08-31 16:27:00
语法对数组大小没有限制。
但不同平台下的不同编译器,会对数组有一些限制。包括大小和维度都会有。
最后,在小于这些限制的情况下,定义了一些大数组,编译器允许这样做,最后编译成可执行文件,到底能否跑得起来,还与操作系统,硬件内存大小,虚拟内存,显卡,及同时运行的进程等诸多因素有关。
通常来说,windows 32 位系统,数组不应该超过 2GB
动态数组也是连续的存储空间。
4 楼
zrydd [专家分:0] 发布于 2012-08-31 17:01:00
[quote]语法对数组大小没有限制。
但不同平台下的不同编译器,会对数组有一些限制。包括大小和维度都会有。
最后,在小于这些限制的情况下,定义了一些大数组,编译器允许这样做,最后编译成可执行文件,到底能否跑得起来,还与操作系统,硬件内存大小,虚拟内存,显卡,及同时运行的进程等诸多因素有关。
通常来说,windows 32 位系统,数组不应该超过 2GB
动态数组也是连续的存储空间。[/quote]
一个双精度8个字节 2GB是2E9个字节 个么对应双精度数组来说就是 大小大概是250E6?
5 楼
臭石头雪球 [专家分:23030] 发布于 2012-08-31 17:18:00
正如我之前说的那样,这只是理论值。到底数组多少能跑起来,这与很多因素有关。
6 楼
zrydd [专家分:0] 发布于 2012-08-31 17:19:00
[quote]正如我之前说的那样,这只是理论值。到底数组多少能跑起来,这与很多因素有关。[/quote]
理论值好大啊 呵呵
7 楼
臭石头雪球 [专家分:23030] 发布于 2012-08-31 17:20:00
[quote][quote]正如我之前说的那样,这只是理论值。到底数组多少能跑起来,这与很多因素有关。[/quote]
理论值好大啊 呵呵[/quote]
对一维数组来说,确实很大,貌似足够用了。
但是对多维数组来说,就不一定了。
你看这个帖子:
http://bbs.pfan.cn/post-392350.html
8 楼
zrydd [专家分:0] 发布于 2012-08-31 17:44:00
[quote][quote][quote]正如我之前说的那样,这只是理论值。到底数组多少能跑起来,这与很多因素有关。[/quote]
理论值好大啊 呵呵[/quote]
对一维数组来说,确实很大,貌似足够用了。
但是对多维数组来说,就不一定了。
你看这个帖子:
http://bbs.pfan.cn/post-392350.html
[/quote]
呃。。是哦。。
不过话说当fortran数组占用很大内存的时候,会不会影响其他程序的运行啊?比如说就2g内存的机子?
9 楼
臭石头雪球 [专家分:23030] 发布于 2012-09-01 08:42:00
这跟操作系统的资源管理有关。
一般来说,内存,硬盘,CPU资源,都由操作系统管理。Fortran 语法是不管的。
至少在 windows 里,肯定会影响其他进程。
我来回复