GNU/Linux >> Linux Esercitazione >  >> Linux

Quali sono le chiamate al sistema operativo/sistema nativo di Windows e Linux effettuate da malloc()?

In Windows, nelle versioni recenti di MSVC, malloc (e C++ new , poiché è implementato utilizzando gli stessi fondamenti per l'effettiva parte di allocazione della memoria di new ) chiama HeapAlloc() . In altre versioni, come g++ mingw, il runtime C è una versione precedente, che non chiama così direttamente HeapAlloc , ma alla base va ancora a HeapAlloc - per trovare qualcosa di diverso, dobbiamo tornare a Windows precedente al 95, che aveva un GlobalAlloc e LocalAlloc insieme di funzioni, ma non credo che le persone usino compilatori a 16 bit di questi tempi, almeno non per la programmazione Windows.

In Linux, se stai usando glibc , dipende dalla dimensione dell'allocazione se chiama sbrk o mmap - mmap (con MAP_ANONYMOUS nei flag) viene utilizzato per allocazioni maggiori (oltre una soglia, che credo sia di 2 MB nell'implementazione tipica)


malloc() e gli amici sono considerati parte del sistema di runtime fornito con un compilatore. Quindi ogni compilatore può utilizzare e utilizza diverse chiamate del sistema operativo per implementare malloc.

Come altri hanno già detto, su Linux le opzioni sono sbrk() e mmap().

Su Windows le opzioni sono HeapAlloc() e VirtualAlloc().


La mia domanda è:come viene implementato malloc nei seguenti sistemi operativi?

Su Linux ci sono due famosi malloc implementazioni:

dlmalloc (il malloc di Doug Lea)

ptmalloc

Su Linux libc come glibc, eglibc o newlib implementano ptmalloc o una variante di ptmalloc.

quali sono le funzioni specifiche del sistema operativo chiamate/implementazioni di malloc()?

Sui sistemi Unix e Linux sbrk e mmap vengono utilizzate le chiamate di sistema. Vedi man 2 sbrk e man 2 mmap per ulteriori informazioni.


Va bene, non sono sicuro di Linux, ma quando si tratta di Windows...

La memoria può essere allocata in due posizioni categorizzate.

1) Heap (heap di processo, heap creati su misura) vedi -> http://msdn.microsoft.com/en-us/library/windows/desktop/aa366711(v=vs.85).aspx utilizzando funzioni come HeapAlloc e HeapFree. LocalAlloc e LocalFree possono essere utilizzati come "scorciatoie" per HeapAlloc quando si desidera eseguire l'allocazione nell'heap del processo predefinito.

2) Memoria virtuale (di solito solo specifica del processo a causa delle restrizioni di accesso alla memoria virtuale globale per motivi di sicurezza), utilizzando VirtualAlloc, VirtualFree. vedi -> http://msdn.microsoft.com/en-us/library/windows/desktop/aa366916(v=vs.85).aspx

Per quanto ne so, malloc utilizzerà le funzioni di allocazione dell'heap su Windows.

Spero che questo aiuti.


Linux
  1. Come controllare la versione del sistema operativo e di Linux

  2. Quali sono le opzioni di montaggio per migliorare le prestazioni del filesystem ext4 in Linux

  3. Debug remoto di un processo Linux da Windows con gdb e gdbserver:cosa serve esattamente sul lato Windows?

  4. Qual è l'interfaccia per le chiamate di sistema ARM e dove è definita nel kernel Linux?

  5. Quali sono le differenze tra lsof e netstat su Linux?

Qual è la differenza tra Linux e Unix?

Quali sono le principali differenze tra Bsd e Gnu/linux Userland?

Qual è il miglior VPS:Windows o Linux?

Che cosa sono le chiamate di sistema Linux e le funzioni di libreria?

Quali sono le convenzioni di chiamata per le chiamate di sistema UNIX e Linux (e le funzioni dello spazio utente) su i386 e x86-64

Qual è la differenza tra una chiamata di libreria e una chiamata di sistema in Linux?