2012-04-10 15 views
0

Ich habe dies:C verschiedenen Größen 2D-Array zuweisen

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"); 
    } 
} 

Im schlimmsten Szenario I 2^a Bits verwenden werden, bedeutet es, ich weiß nicht immer dafür verwenden müssen uint64_t und uint sogar. Meine Idee ist nur 1 Byte für eine < 8, 2 Bytes für eine < 16 und a> = 8 und damit auf 8 Bytes (uint64_t) zuzuweisen.

Ist das möglich? Wie kann ich das nur mit meinem variablen Array tun?

+0

Ich verstehe die Frage nicht ganz: Versuchen Sie, ein Bit-Array zu reservieren (um einzelne Bits zu speichern) oder sind Sie nur besorgt über Überbelegung? – LiraNuna

+0

@ Frederico Hinweis im schlimmsten Fall Sie verwenden '2^(a + 3)' Bytes und nicht '2^a' Bits malloc alloziert in Bytes nicht Bits, so würde dies nicht wie erwartet funktionieren – keety

+0

@LiraNuna nur besorgt über über Zuteilung –

Antwort

0

Dies sollte wahrscheinlich einen Kommentar eingeben (oder 3) haben, aber ...

Sie müssen genau durch, herauszufinden, beginnen, wie viele Bytes Sie müssen (und für das, was, wenn ich Sie annehmen, daß Teil abgedeckt.)

Was ist 25? Warum reservieren Sie Speicher für 25 verschiedene Arrays der Größe 8, 16, 32 ... 2^27? Dies kann Beispielcode sein, aber wir werden immer noch von einer magischen Zahl abgeworfen: 25. Wir hätten den Namen der Konstante (oder des Präprozessor-Makros) verwenden können.

8 ist eine weitere magische Zahl und es ist auch problematisch. sizeof(*array) ist nicht garantiert zu sein 8.

Ich bin auch ein bisschen durch Ihre Idee verwirrt. Ihr aktueller Code weist 1024 Bytes für a = 7 zu. Wie wird ein einzelnes Byte ausreichen, um alles zu speichern, was Sie in Ihrem Prototyp 1024 Byte benötigen?

Verwandte Themen