2012-04-10 2 views
0

I이 있습니다 : 나는 2^비트를 사용합니다 최악의 시나리오에서는 2 차원 배열 다른 크기를 할당 C

uint64_t **array; 
int a; 

if((array = malloc(8 * 25)) == NULL){ 
    errx(1, "malloc"); 
} 

for(a = 0; a < 25; a++){ 
    if((array[a] = malloc(8 * (1 << a))) == NULL){ 
     errx(1, "malloc 1"); 
    } 
} 

, 그것은 의미, 난 항상 이것에 대한 uint64_t 사용해야하고, UINT하지 않습니다 조차. 내 생각은 < 8에 대해 1 바이트를 할당하고 < 16 바이트를 2 바이트,> = 8로 8 바이트 (uint64_t)로이 바이트를 할당합니다.

그렇게 할 수 있습니까? 변수 배열을 사용하여 어떻게 할 수 있습니까?

+0

저는 질문을 잘 이해하지 못합니다. 비트 배열 (개별 비트를 저장하기 위해)을 할당하려고합니까, 아니면 할당 문제가 걱정 되십니까? – LiraNuna

+0

최악의 경우 @Frederico는'2^(a + 3)'바이트가 아닌'2^a' 비트를 사용하고 있습니다. malloc은 비트가 아닌 바이트 단위로 할당하므로 – keety

+0

@LiraNuna가 이상하게 생각합니다 할당 –

답변

0

이것은 아마도 ... 코멘트하고 (3), 그러나 했어야

것을 가지고 내가 당신을 생각하지만 당신은 (당신이 필요합니다 정확히 얼마나 많은 바이트 파악에 의해 무엇을 시작해야

일부는 다룹니다.)

25는 무엇입니까? 왜 크기 8, 16, 32 ... 2^27의 25 가지 배열에 대해 메모리를 할당하고 있습니까? 이것은 샘플 코드 일지 모르지만, 우리는 여전히 매직 넘버에 의해 버려졌습니다 : 25. 상수 (또는 전 처리기 매크로)의 이름을 사용할 수있었습니다.

8은 또 다른 마법의 숫자이며 문제가됩니다. sizeof(*array)은 8이 될 수 있습니다.

나는 또한 약간의 혼란 스러움을 가지고 있습니다. 현재 코드는 a = 7에 1024 바이트를 할당합니다. 프로토 타입에 1024 바이트를 할당 할 필요가있는 것을 저장하기에 충분한 단일 바이트는 어떻게됩니까?