gpt4 book ai didi

arrays - Fortran 90 中 double 的最大数组大小是多少?

转载 作者:行者123 更新时间:2023-12-01 09:58:54 25 4
gpt4 key购买 nike

对不起,如果这不是做这个问题的正确地方,这不是关于编程而是一个技术问题。
我需要以 double 处理巨大大小的二维向量数组,大约有 1000 万个。但是,在其他程序中,我在处理这种数组时遇到了内存问题。我的问题是 double 数组大小是否有某种限制。

我在 Linux、Intel 两核、32 位上工作。
谢谢

最佳答案

好的,我将解释为什么限制字节数,而不仅仅是元素数。在数组索引期间,必须计算元素的地址。当然它必须适合intptr_t C 变量。此外,以字节为单位的数组大小必须适合 size_t C 变量。这些都是 32 位或 64 位在现代机器上的 32 位和 64 位程序。这同样适用于程序可寻址的虚拟内存!还有操作系统和 CPU 可寻址的内存,尽管它们可以是 64 位的,即使程序是 32 位的。

这是 32 位程序和操作系统无法寻址超过 4 GB 内存的根本原因。即使您可以使用比所选 CPU 字长更宽的 Fortran 变量以某种方式计算地址,CPU 也无法访问它。

最后,我在 Intel Fortran 中以 32 位模式进行了一个实验,其中包含 32 字节元素的数组:

complex(16), allocatable :: a(:)
do i=1,100
allocate(a(2**i))
a(size(a)) = 1
deallocate(a)
write(*,*) i
end do
end

ifort arraysize.f90 -m32 -check -traceback -g

输出如预期:
       1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
forrtl: severe (179): Cannot allocate array - overflow on array size calculation.

正如预期的那样,以字节为单位的数组大小溢出,并且程序在索引变量溢出之前很久就崩溃了。这不是编译器特定的功能,但有一个根本原因。

关于arrays - Fortran 90 中 double 的最大数组大小是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19781713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com