Warum hat malloc reservieren Sie eine andere Anzahl von bytes als angefordert?

Ich habe dieses Stück code

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>

int main(){
    void *a, *b;

    a = malloc(16);
    b = malloc(16);
    printf("\n   block size (for a): %p-%p : %li", b, a, b-a);

    a = malloc(1024);
    b = malloc(1024);
    printf("\n   block size (for a): %p-%p : %li", b, a, b-a);  
}

Sollte nicht dieser Druck den letzten zugeordneten block Größe (16 oder 1024)? Stattdessen druckt 24 und 1032, also die Menge an Speicher zu haben scheint 8 extra bytes.

Mein problem ist (bevor das test-Fall), dass ich malloc() in einer Funktion (1024 bytes), und die Rückgabe der zugewiesenen Ergebnis. Bei der überprüfung der Blockgröße auf die Funktion zurückgeben, die ich bekommen 516 Blöcke... und ich verstehe nicht, warum. Ich denke, das könnte der Grund für die Beschädigung des Speichers, der Auftritt, nachdem ich einige Verarbeitung auf den zugewiesenen Puffer:)

Edit: ich habe gesehen Wie kann ich die Größe eines Arrays von einem Zeiger in C? und scheint zu Fragen, die gleiche Sache, sorry für die Umbuchung.

Habe ich wiederholt mein Beispiel zu meinem spezifischen code:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>

short int * mallocStuff(long int number, short int base){
    short int *array;
    int size=1024;

    array=(short int*)calloc(1,size);
    //array=(short int*)malloc(size);

    return array;
}

int main(){
    short int **translatedArray;

    translatedArray=malloc(4*sizeof(short int));

    int i;
    for(i=0;i<4;i++){
        translatedArray[i]=mallocStuff(0,0);

        if(i>0)
            printf("\n   block size (for a): %p-%p : %i",
                translatedArray[i], translatedArray[i-1], translatedArray[i]-translatedArray[i-1]);
    }

    return 0;
}

Und der Ausgang ist

   block size (for a): 0x804a420-0x804a018 : 516
   block size (for a): 0x804a828-0x804a420 : 516
   block size (for a): 0x804ac30-0x804a828 : 516

Gemäß den obigen post, das größer ist als 1024. Bin ich falsch?

InformationsquelleAutor Quamis | 2009-01-09
Schreibe einen Kommentar