GNU/Linux >> Znalost Linux >  >> Linux

Jaká jsou nativní volání OS/systému Windows a Linuxu prováděná z malloc()?

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.


Linux
  1. Vzdálené ladění linuxového procesu z Windows pomocí gdb a gdbserver:co přesně je potřeba na straně Windows?

  2. Jaké je rozhraní pro systémová volání ARM a kde je definováno v jádře Linuxu?

  3. Jaké jsou rozdíly mezi lsof a netstat na linuxu?

  1. Jak zkontrolovat verzi OS a Linuxu

  2. Jaká je aktuální úroveň běhu systému Linux?

  3. Jaký je rozdíl mezi voláním knihovny a voláním systému v Linuxu?

  1. Linux – Jak zjistit, jaké pevné disky jsou v systému?

  2. Jaké je nejlepší VPS:Windows nebo Linux?

  3. Jaké jsou možnosti připojení pro zlepšení výkonu souborového systému ext4 v Linuxu