可以在GCC中声明的静态数组的最大大小是多少?

ted*_*ted 6 c arrays compiler-construction gcc

怎么决定?这取决于编译器/架构/主机系统吗?

例:

int array[0x8000000000000000]; 
Run Code Online (Sandbox Code Playgroud)

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

Error "size of array 'array' is too large".
Run Code Online (Sandbox Code Playgroud)

Sid*_*osh 17

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

  • 如果已在本地范围内声明了数组(在某个例程内),则大小限制由堆栈大小决定.
  • 如果gcc在linux上运行,则堆栈大小由某个环境变量决定.使用ulimit -a查看和ulimit -s STACK_SIZE修改堆栈大小.
  • 如果gcc在Windows上运行(如MinGW),则可以通过gcc -Wl, - stack,STACK_SIZE指定堆栈大小.
  • 如果已在全局范围内声明了数组,则该数组将存储在DATA或BSS部分中(基于数组是分别初始化还是未初始化).DATA和BSS部分大小由底层OS确定.
  • 如果已经在静态范围(例如static int array[SIZE])中声明了数组,那么数组将再次存储在DATA或BSS部分中(基于数组是分别初始化还是未初始化).DATA和BSS部分大小由底层OS确定.

  • 最好有一些关于Linux和Windows的DATA / BSS部分大小限制的数字(即使它们可以更改)。 (2认同)