【发布时间】:2013-08-24 15:51:26
【问题描述】:
它是如何确定的?这是否取决于编译器/架构/主机系统?
例子:
int array[0x8000000000000000];
对于 x86_64 位系统 GCC 输出中的这一行:
Error "size of array 'array' is too large".
【问题讨论】:
-
总线大小是一个因素。虚拟内存大小可以是另一个。 8 位 CPU 通常不支持虚拟内存。有的 16 位 CPU 有,有的没有。大多数 32 位 CPU 都支持虚拟内存。我会冒昧地声称所有 64 位 CPU 都支持虚拟内存,但有人可能会举出一个反例。
-
@ted:你必须清楚 where 和 how 声明数组。全球范围?功能范围?
static关键字? -
@JimBalter:Z80 CPU(以及 6502、6800、6809 和 8080 芯片)是 8 位机器,但支持 16 位地址,因此内存为 64 KiB(65536 字节)。
-
如果你的机器有 64 字节的 RAM 和
sizeof(int) == 2,那么你可以使用的最大数组大小是int a[32];('内存大小/数组一个元素的大小')和那么您将没有任何其他可用的变量。但是 64 字节的内存应该告诉您最大可能大小为 64,但每个数字必须是 1 字节数字(signed char或unsigned char)。一般来说,在没有虚拟内存的情况下,如果内存大小为M,数组中某一项的大小为S,则数组最大大小为M/S。 -
“除了你之外没有人在谈论存储持续时间和变量定位” - 你不正确......这里的第一条评论说“具有自动存储持续时间的块范围数组对象”。你也非常粗鲁。再见。
标签: c arrays gcc compiler-construction