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.