Chcę zaimplementować własny system zarządzania pamięcią dynamiczną, aby dodać nowe funkcje, które pomagają zarządzać pamięcią w C++.W jaki sposób są realizowane malloc i free?
Używam Windows (XP) i Linux (Ubuntu). Co jest potrzebne do zaimplementowania funkcji takich jak "malloc" i "free"? Myślę, że muszę używać wywołań systemowych najniższego poziomu.
Dla systemu Windows znalazłem funkcje: GetProcessHeap, HeapAlloc, HeapCreate, HeapDestroy i HeapFree.
Dla systemu Linux, nie znalazłem żadnych wywołań systemowych dla zarządzania stosem. W systemie Linux malloc i free są wywołaniami systemowymi, nieprawdaż?
Dzięki
Edit:
C++ nie zapewnia śmieciarza i śmieciarza jest powolny. Niektóre alokacje są łatwe do uwolnienia, ale są alokacje, które wymagają odśmiecacza.
Chcę zaimplementować te funkcje i dodać nowe funkcje:
* Za każdym razem, gdy wywoływana jest funkcja free(), sprawdź, czy wskaźnik należy do sterty.
* Pomoc w usuwaniu śmieci. Muszę przechowywać pewne informacje o przydzielonym bloku.
* Użyj wielu stert (HeapCreate/HeapDestroy w systemie Windows). Mogę szybko usunąć całą stertę z przydzielonymi blokami.
Powinieneś popatrzeć na podzielniki puli boost: http://www.boost.org/doc/libs/1_43_0/libs/pool/doc/index.html –
Czy jesteś pewien, że HeapAlloc to wywołanie systemowe (jądro)? Mogą one być zaimplementowane po stronie użytkownika i uruchamiać niektóre ukryte prywatne funkcje po stronie jądra, gdy proces wymaga więcej pamięci. – doron
Szkwał - brzmi to dziwnie jak pytanie domowe z tego tekstu. tak? Nie? –