malloc/free - Größe



  • Hallo,

    (1)
    woher weiß free() ;, wie viele
    Bytes es wieder freigeben muss?
    Wo wird gespeichert, wie viele
    von malloc(x) reserviert wurden?

    (2)
    Wenn ich viele kleine Speicher-
    bereiche zu jeweils wenigen Bytes
    haben will und jeden einzeln mit
    malloc() ; reserviere, reserviert
    der Rechner dann diesen Speicherplatz
    effektiv oder jeweils gleich z.B.
    4 Kilobytes?

    Vielen Dank im voraus!
    Mit freundlichen Grüßen,
    Michael



  • das ist alles implementation defined 😉

    wobei ich glaube, dass malloc meistens nur soviel speicher reserviert wie du willst (bzw. + padding bytes)

    meistens speichert malloc die block groesse in das element p-1
    ->
    void* malloc(size_t size)
    {
    size_t* p=alloc(size+sizeof size_t);
    *p=size;
    ++p;
    return p;
    }

    und free waere dann:

    void free(void* p)
    {
    size_t* p1=p;
    --p1;
    dealloc(p1,*p1+sizeof size_t);
    }

    dealloc und alloc gibt es natuerlich nicht, aber so inetwa koennte malloc/free aufgebaut sein (muss aber nicht!!!)



  • Zu 2.: Kann man nicht sagen. Vielleicht steht ja nach dem ersten malloc kein Speicher mehr zur Verfügung. Allgemein ist es aber ziemlich seltsam, dass man viele kleine Bereiche einzeln reservieren möchte. Normalerweise versucht man die Aufrufe von malloc zu minimieren weil sie sehr zeitintensiv sind. Also 1x malloc mit einem relativ großen Betrag an Speicher. Wenn dieser Bereich 'voll' ist, vergrößert man mit realloc. Nun hat man den Speicher immer noch 'am Stück'.



  • Manche Compiler erzeugen Code, der große Blöcke beim Betriebssystem reserviert und kleinere Blöcke selbst verwaltet.


Anmelden zum Antworten