我想知道C中的最大数组大小是什么,它取决于数据的类型,以及它是否取决于它的声明位置(堆或堆栈)。
以下代码适用于int
,最大为1048576(2 ^ 20),也是1048577(相同+ 1),但不适用于2097152(2 ^ 21) - 我没有搜索到精确的限制:
#include <stdio.h>
#define MAX 1048577llu /* 2097152llu */
int main()
{
int tab[MAX];
/* long long int tab[MAX] */
tab[MAX - 1] = 123;
printf("tab[%llu] declared, tab[%llu] = %d\n", MAX, MAX - 1, tab[MAX - 1]);
return 0;
}
使用long long int
,它在2 ^ 20处失败,但在2 ^ 19处成功。