我正在尝试申请一个巨大的4D数组(有192G可用空间),但输入的内容与输出的不匹配(请参见下面代码中的assert())。 (我将定义的尺寸缩小了,但实际数字为:20、9000、195、120)
#define SIZE_A 1
#define SIZE_B 3
#define SIZE_C 4
#define SIZE_D 2
#define offSet(a,b,c,d) ( ((size_t) SIZE_A * SIZE_B * SIZE_C * a) + ((size_t) SIZE_B * SIZE_C * b) + ((size_t) SIZE_C * c) + d)
void xall(void)
{
int *aray = (int *) malloc( (size_t) SIZE_A * SIZE_B * SIZE_C * SIZE_D * sizeof(int));
int counter = 0;
for (int a = 0; a < SIZE_A; ++a){
for (int b = 0; b < SIZE_B; ++b){
for (int c = 0; c < SIZE_C; ++c) {
for (int d = 0; d < SIZE_D; ++d){
aray[ offSet(a,b,c,d) ] = counter++;
}}}}
counter = 0;
for (int a = 0; a < SIZE_A; ++a){
for (int b = 0; b < SIZE_B; ++b){
for (int c = 0; c < SIZE_C; ++c) {
for (int d = 0; d < SIZE_D; ++d){
int value = aray[ offSet(a,b,c,d) ] ;
assert(value == counter++);
}}}}
}
2^31-1
字节。但是你仍然可以使用malloc
分配超过这个大小的内存。因此,这只是编译器的限制。 - Mysticial