有没有办法让以下语句在C中有效?

时间:2015-03-18 04:01:02

标签: c arrays long-integer

有没有办法让这个语句在C中有效?我需要在数组中保存18446744073709551615个元素。

unsigned long long int array [18446744073709551615] ;

3 个答案:

答案 0 :(得分:3)

如果要在堆栈上分配大量内存,因为堆栈大小通常较小,您的程序很可能会崩溃。如果该计算机的内存大于array = main GB,您可以将18446744073709551615 * 8声明为全局(147573952589.67642212之外)以使其有效!

答案 1 :(得分:2)

这取决于特定机器/ OS /平台上指针的大小;换句话说,机器需要能够访问所有元素。理论上,是的,它可能是一个有效的陈述。但它也无法实现。

谁知道。

答案 2 :(得分:0)

不可能,甚至没有关闭。

18446744073709551615是2 ^ 64-1。 long long是64位宽,即8字节。要解决您的阵列,您需要64 + 3 = 67位地址空间。当前的计算机没有超出64位寻址。此外,即使是64位计算机也只能解决其中的一部分问题。 例如,x64仅允许48位虚拟地址空间,物理上甚至更低(AMD 48位,英特尔小于此值)。

即使有一个128位处理器,处理你的2 ^ 67字节内存(即使只是虚拟),你需要大约17000个当前可用的最大硬盘(6 TB)。