Ve Windows, v posledních verzích MSVC, malloc (a C++ new
, protože je implementován pomocí stejných základů pro skutečnou část alokace paměti new
) volá HeapAlloc()
. V jiných verzích, jako je g++ mingw, je runtime C starší verze, která nevolá tak přímo na HeapAlloc
, ale v základu to stále jde do HeapAlloc
- abychom našli něco jiného, musíme se vrátit k Windows starším než 95, které měly GlobalAlloc
a LocalAlloc
sada funkcí – ale nemyslím si, že v dnešní době lidé používají 16bitové kompilátory – alespoň ne pro programování Windows.
V Linuxu, pokud používáte glibc
, záleží na velikosti alokace, zda volá sbrk
nebo mmap
- mmap
(s MAP_ANONYMOUS
v příznakech) se používá pro větší alokace (přes práh, který je podle mého názoru 2 MB v typické implementaci)
malloc() a přátelé jsou považováni za součást běhového systému, který je dodáván s kompilátorem. Každý kompilátor tedy může používat a používá různá volání OS k implementaci malloc.
Jak řekli jiní, v Linuxu jsou možnosti sbrk() a mmap().
V systému Windows jsou možnosti HeapAlloc() a VirtualAlloc().
Moje otázka zní – jak je malloc implementován v následujících operačních systémech?
V Linuxu existují dva známé malloc
implementace:
dlmalloc (malloc Douga Lea)
ptmalloc
V Linuxu libc jako glibc, eglibc nebo newlib implementujte ptmalloc nebo variantu ptmalloc.
jaké jsou funkce specifické pro OS, které se nazývají/implementace malloc()?
Na systémech Unix a Linux sbrk
a mmap
používají se systémová volání. Viz man 2 sbrk
a man 2 mmap
pro více informací.
Dobře, nejsem si jistý Linuxem, ale pokud jde o Windows...
Paměť lze alokovat na dvě kategorizovaná místa.
1) Haldy (Process Heap, Custom Created Heaps) viz -> http://msdn.microsoft.com/en-us/library/windows/desktop/aa366711(v=vs.85).aspx pomocí funkcí jako HeapAlloc &HeapFree. LocalAlloc a LocalFree lze použít jako „zástupce“ HeapAlloc, když chcete alokovat ve výchozí hromadě procesu.
2) Virtuální paměť (obvykle pouze procesně specifická kvůli omezením přístupu v globální virtuální paměti kvůli bezpečnosti), pomocí VirtualAlloc, VirtualFree. viz -> http://msdn.microsoft.com/en-us/library/windows/desktop/aa366916(v=vs.85).aspx
Pokud je mi známo, malloc použije funkce alokace haldy v systému Windows.
Doufám, že to pomůže.