Ein "simple" frage zu free()
-
Woher weiß eigentlich free() wie viel Speicher es freigeben muss? Wird da intern eine Tabelle verwaltet, oder wie geht es?
-
soweit ich weiß verwaltet das os den speicher und merkt sich entsprechend wieviel speicher allokiert wird... und auch wieder feigegeben werden muss...
-
Tolle Frage, weis da einer mehr darüber, bin auch neugierig
-
malloc könnte z.B. sizeof(size_t) Bytes mehr allokieren, in diese die angeforderte Größe schreiben und einen verschobenen Zeiger zurückgeben. free kann den Wert dann wieder auslesen.
-
Ja, es werden zusatzinfos gehalten, weswegen mist bauen mit heap-variablen (per malloc) ziemlich schnell den ganzen Heap zerstört. Man kann das verschieden machen. Es kümemrt sich i.A. übrigens nicht das OS darum sondern die C-Library. Das OS kennt oft nur ober und untergrenze des Heaps. Eine Methodik wäre es, eine Tabelle zu halten, eine andere möglichkeit ist es, eine verkettete Liste zu haben mti den Elementen length und next, eine für freie und eine für belegte Blöcke. Die Beschreibung liegt dann z.B. vor dem alloziierten Speicher, so dass malloc quasi immer 8 Bytes mehr belegt und die ersten 8 Bytes für sich zur Info behält.
-
muss was anderes geben.
Hab unter Dos mit Borland C 3.1 (so was gibts auch noch) ein Programm geschrieben das das freie Memory anzeigt,
danach verschieden große allokierungen macht und mir nach jeder Allokierung das freie Memory anzeigt,
Die Differenzen waren identisch mit den memory Mengen die allokiert wurden.