【发布时间】:2012-03-03 09:31:55
【问题描述】:
我正在尝试 malloc 一个巨大的 4d 数组(192 gig 可用);但是输入的内容与输出的内容不匹配(请参见下面代码中的 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++);
}}}}
}
【问题讨论】:
标签: c dynamic macros multidimensional-array