有没有办法让这个语句在C中有效?我需要在数组中保存18446744073709551615个元素。
unsigned long long int array [18446744073709551615] ;
答案 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)。