7

它是如何确定的?这是否取决于编译器/架构/主机系统?

例子:

int array[0x8000000000000000]; 

对于 x86_64 位系统 GCC 输出中的这一行:

Error "size of array 'array' is too large".
4

1 回答 1

18

我假设静态数组是指一个固定长度的数组(静态分配的,例如int array[SIZE],不是动态分配的)。数组大小限制应取决于声明的数组范围。

  • 如果您在本地范围内(在某个例程内)声明了数组,则大小限制由堆栈大小决定。
  • 如果 gcc 在 linux 上运行,堆栈大小由一些环境变量决定。用于ulimit -a查看和ulimit -s STACK_SIZE修改堆栈大小。
  • 如果 gcc 在 windows(如 MinGW)上运行,堆栈大小可以通过 gcc -Wl,--stack, STACK_SIZE 指定。
  • 如果您已在全局范围内声明了数组,则该数组存储在 DATA 或 BSS 部分(分别基于数组是初始化还是未初始化)。DATA 和 BSS 部分的大小由底层操作系统决定。
  • 如果您已经在静态范围内声明了数组(如static int array[SIZE]),则该数组再次存储在 DATA 或 BSS 部分中(分别基于数组是初始化还是未初始化)。DATA 和 BSS 部分的大小由底层操作系统决定。
于 2013-08-22T05:23:17.170 回答