002
05.08.2006, 10:14 Uhr
FloSoft
Medialer Over-Flow (Administrator)
|
Hi, im Endeffekt kann man (im großen und ganzen)
malloc mit new gleichsetzen, und free mit delete[]
Natürlich gibts es kleinere Unterschiede, u.A das delete und new keine Funktionen im eigentlichen Sinn sind, sondern operatoren.
Es läuft immer darauf hinaus, das malloc z.B. mit brk/sbrk das Datensegment vergrößert, (normal holt sich die funktion direkt ein vielfaches von einer page, also wenn du jetzt 100x 2Byte mallocst, holt es sich beim ersten z.B. 4096kb und gibt dir das dann stück für stück) dann natürlich erst seine Verwaltungstrukturen (wie immer die auhc aussehen mögen) reinschreibt und dann eben einen Speicheradresse zurückliefert an dem du nun die Menge Bytes frei hast die du wolltest. Im Endeffekt macht new auch nichts anderes.
imho weiß free und delete erstmal nicht wie groß der Speicher war und ob der Pointer darauf auch überhaupt gültig ist weiß es auch nicht
z.B.
C++: |
int a; int *b = &a; delete b;
|
fliegt einen um die Ohren, gleiche Spiel mit free.
delete und free geben (bzw versuchen es zumindest) eben den Bereich frei, indem sie in der Verwaltungsstruktur davor oder dahinter den Bereich als frei markieren, und normalerweise passieren dann noch komplexere dinge, z.b defragmentierung der freien bereiche, usw, ist kompliziert und meist für normaluser uninteressant (den mist lernt man alles im 2ten semester informatik studium ) -- class God : public ChuckNorris { }; |