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.