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

问题描述 投票:0回答:1

如何确定?这取决于编译器/架构/主机系统吗?

示例:

int array[0x8000000000000000]; 

对于这一行,GCC 在 x86_64 位系统上输出以下内容:

Error "size of array 'array' is too large".
arrays c gcc
1个回答
21
投票

我认为静态数组是指固定长度的数组(静态分配,如

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 部分的大小由底层操作系统决定。
© www.soinside.com 2019 - 2024. All rights reserved.