Differenza tra mmap e malloc

mmap vs malloc

C'è una memoria dinamica in C e questo punta all'allocazione della memoria nel linguaggio di programmazione C attraverso un insieme di funzioni presenti nella libreria standard C. Uno di questi è malloc, che si riferisce all'assegnazione della memoria. Nel sistema UNIX c'è mmap, che si riferisce a un sistema mappato in memoria che viene fornito con il proprio I / O univoco. Questi due (mmap e malloc) avranno un valore nominale che svolgono la stessa funzione, ma un ulteriore esame rivela alcune differenze. Queste differenze, che derivano dalla funzionalità, sono descritte di seguito.

differenze

Prima di tutto, è importante stabilire se ci sono prove che indicano che esiste una soffocante restrizione della memoria disponibile. Questo viene fatto attraverso la misurazione delle prestazioni del programma contro la gestione della memoria .

L'interfaccia di allocazione della memoria principale è malloc. Questo è il più grande nella libreria C. Parte del codice di gestione in esso contenuto è mmap. Quando malloc è in esecuzione, raccoglie tutti i servizi di sistema disponibili. Ulteriori funzionalità del sistema possono essere mobilitate attraverso il kernel, che è una delle strategie di gestione della memoria che i sistemi utilizzano per garantire un'allocazione di memoria soddisfacente. Il processo non è semplice, tuttavia, ed è stato reso complicato per la sola ragione di impedire alle persone di creare programmi semplici che possono disorganizzare l'allocazione della memoria e quindi creare prestazioni scadenti.

'mmap' d'altra parte è una chiamata di sistema che si occupa e richiede al kernel di trovare una regione non utilizzata e contigua nell'indirizzo di un'applicazione che è abbastanza grande da consentire la mappatura di diverse pagine di memoria. C'è anche la creazione di strutture di gestione della memoria virtuale che in effetti non possono portare a un segfault.

Malloc generalmente funziona nella maggior parte del processo di gestione della memoria. Nel caso in cui il programma richieda memoria aggiuntiva, questo viene preso in prestito dal sistema operativo. Mmap d'altra parte fa uso di un interruttore di contesto che converte in kernel land.

Malloc è più adatto per allocare memoria in qualsiasi applicazione in esecuzione sul sistema anziché utilizzare mmap. Questo è ciò che è necessario che avvenga per impostazione predefinita, tranne nei casi speciali in cui può essere consentito.

Mmap può essere utilizzato per accelerare la risposta fornita dalle applicazioni. Ciò tuttavia non è consigliabile in quanto finisce per sacrificare alcuni byte alle pagine in modo che l'applicazione possa funzionare senza intoppi. Sebbene il contenuto dei dati possa sembrare piccolo all'inizio, estrapolandolo quando numerose applicazioni vogliono essere eseguite può in effetti rallentare ulteriormente il sistema.

Dopo aver misurato le prestazioni e l'utilizzo delle risorse, dovrebbe essere eseguita una valutazione approfondita dell'utilizzo dei dati da parte di tutte le applicazioni in esecuzione sul sistema. Se è possibile mostrare la durata delle applicazioni in esecuzione, può migliorare.

L'uso di mmap per allocare memoria presenta lo svantaggio che l'allocazione e la deallocazione dei dati in blocchi è costosa. Questo perché i dati sono divisi in numerose aree e nega anche mmap dal fare chiamate di sistema.

Mmap è vantaggioso rispetto a malloc perché la memoria utilizzata da mmap viene immediatamente restituita al sistema operativo. La memoria utilizzata da malloc non viene mai restituita a meno che non vi sia un'interruzione del segmento di dati. Questo ricordo è appositamente tenuto per essere riutilizzato.

Sommario

'malloc' rappresenta il principale punto di allocazione della memoria

Un sistema mmap chiama e richiede un kernel per trovare le regioni inutilizzate negli indirizzi delle applicazioni che possono ospitare la mappatura di diverse pagine di memoria

Mmap non è raccomandato per l'allocazione della memoria poiché divide la memoria disponibile e non può effettuare chiamate di sistema

Un vantaggio di mmap rispetto a malloc è la disponibilità di memoria, rispetto alla memoria malloc, che viene riutilizzata.