Recentemente ho visto il seguente post:Quali sono le chiamate di sistema/sistema operativo nativo di Windows e Linux eseguite da malloc()?
un allocatore di memoria non è di livello inferiore a malloc. (L'allocatore predefinito chiama in genere malloc direttamente o indirettamente)
Un allocatore consente solo di specificare diverse strategie di allocazione . Ad esempio, è possibile utilizzare un allocatore che chiama malloc una volta per recuperare un ampio pool di memoria e quindi per le successive richieste di allocazione , restituisce solo una piccola porzione di questo pool.
Oppure è possibile utilizzarlo come un gancio per consentire di eseguire alcune attività aggiuntive ogni volta che la memoria viene allocata o liberata.
Per quanto riguarda la seconda domanda, malloc è il più basso possibile senza perdita di portabilità. malloc viene in genere implementato utilizzando alcune funzione di allocazione di memoria specifica del sistema operativo, in modo che il livello inferiore sia ancora . Ma questo non è correlato alla tua domanda principale, dal momento che gli allocatori C++ sono un'astrazione di livello superiore.
La mia domanda è-come è malloc implementato nei seguenti sistemi operativi?
- per Windows
- per Linux
quali sono le funzioni specifiche del sistema operativo che sono chiamati/implementazioni di malloc()?
per Linux, è 'sbrk' –
Per quale implementazione della libreria standard? 'new' /' malloc' non è necessariamente parte dell'OS API stessa, ad es. su Windows, che ha solo 'HeapAlloc',' VirtualAlloc' ecc. come parte della sua API. – dyp
No, 'sbrk' è quasi obsoleto su Linux, sta usando' mmap' –