Logo it.removalsclassifieds.com

Differenza tra Mmap e Malloc (con tabella)

Sommario:

Anonim

Nella programmazione C esiste una memoria dinamica che punta all'allocazione della memoria nella libreria standard C tramite un insieme di funzioni. Malloc è uno di questi, utilizzato per allocare la memoria. Poi c'è mmp. Viene utilizzato come un sistema mappato in memoria con input e output univoci. Questi due forniscono le stesse funzioni, ma approfondire questo argomento rivela alcune differenze.

Mmap vs Malloc

La differenza tra mmap e malloc è che il tempo di esecuzione di mmap è molto inferiore a quello di malloc. Malloc è l'interfaccia di allocazione della memoria principale, mentre mmap è un sistema. Questo è responsabile della ricerca da parte del kernel di indirizzi sufficientemente grandi da consentire la mappatura di molte pagine.

Mmap in computing è una chiamata di sistema multi-tasking POSIX che registra tutti i dati o file e dispositivi nella sua memoria. Questo è anche noto come il metodo che rientra nel file mappato in memoria e implementa la copia dei dati nella sua memoria fisica poiché il contenuto non può essere letto direttamente dall'unità.

Malloc è la forma abbreviata del termine allocazione di memoria che viene utilizzata per allocare dinamicamente un enorme blocco di dati, rispetto alla dimensione specificata, e quando ha successo restituisce un puntatore che punta al primo byte della memoria allocata, altrimenti restituisce NULL. Nell'effettivo meccanismo di allocazione della memoria, sono disponibili molti risultati diversi che vengono utilizzati da Malloc.

Tabella di confronto tra Mmap e Malloc

Parametri di confronto

Mmap

Malloc

Definizione Mmap si riferisce a una chiamata di sistema che chiede al kernel di trovare un indirizzo grande per la mappatura delle pagine. Malloc è la principale interfaccia di allocazione della memoria che raccoglie tutte le strutture disponibili nel sistema.
Funzione Mmap usa il cambio di contesto e lo trasforma in un kernelland. Malloc alloca il blocco di memoria in apile.
Chiamato anche come Mmap è anche conosciuto come chiamata di sistema. Malloc è anche conosciuto come l'interfaccia di allocazione della memoria principale.
Risultati Mmap non influisce sulle altre prestazioni del sistema. Malloc disorganizza e crea scarse prestazioni del sistema.
Più adatto per Mmap è più adatto per accelerare il processo di risposte fornite dalle applicazioni. Malloc è più adatto per allocare la memoria in qualsiasi applicazione nel sistema.

Cos'è Mmap?

Mmap si riferisce a una chiamata di sistema Unix conforme a POSIX che mappa i dati, il file o il dispositivo nella memoria. È un metodo di input e output della mappatura della memoria. Nel processo di chiamata, viene creata una nuova mappatura nello spazio degli indirizzi virtuale. In addr. viene trovato l'indirizzo iniziale della nuova mappatura e la lunghezza della mappatura è specificata dall'argomento length (che dovrebbe essere maggiore di 0).

Se l'indirizzo è NULL, l'indirizzo viene scelto dal kernel, che esegue la mappatura, che è considerata il metodo più semplice per creare una nuova mappatura. Se l'indirizzo non è Trovato come NULL, il kernel lo considera come un'indicazione per posizionare la mappatura in una posizione su Linux.

Il kernel trova il confine della pagina più vicino e prova a fare una mappatura in quell'area. Se il kernel trova una mappatura già esistente nell'area, seleziona un nuovo indirizzo che potrebbe dipendere dall'indicazione che il kernel ha assunto. A seguito di questa chiamata, viene restituito l'indirizzo della nuova mappatura. Subito dopo la restituzione della chiamata, il descrittore di file, fd, chiude immediatamente la mappatura senza invalidare.

Cos'è Malloc?

Il malloc() è una funzione di allocazione della memoria che alloca i byte di dimensione e restituisce un puntatore alla memoria che è stata allocata. La memoria non è impostata sulla posizione iniziale. Se il nome del byte della dimensione è 0, malloc() invia NULL o un puntatore a valore univoco, che in seguito può essere passato a free() con successo.

Lo spazio di memoria che è stato puntato da ptr, viene rilasciato dalla funzione free(), che avrebbe dovuto essere rimandata indietro da malloc(). Altrimenti, si dice che si verifica un comportamento indefinito, se il free (ptr) è stato chiamato in precedenza. Nessuna operazione viene eseguita o eseguita se ptr è Trovato NULL. Se il ptr è NULL, allora il valore di una chiamata è uguale a malloc (size), per ogni valore di size; se è equivalente a 0 e ptr non è NULL, il valore della chiamata è uguale a free (ptr).

Solo quando ptr è NULL, dovrebbe essere stato restituito da una precedente chiamata a malloc(). E l'area che è stata puntata è stata cambiata, viene fatto un (ptr) gratuito. Per impostazione predefinita, Linux segue una strategia di allocazione della memoria ottimistica, il che significa che se malloc() restituisce un valore non NULL, è possibile che la memoria vada persa. E se si scopre che il sistema ha una carenza di memoria, pochi processi verranno distrutti dal killer OOM.

Principali differenze tra Mmap e Malloc

Conclusione

In conclusione, mmap è una chiamata di sistema che chiede al kernel di individuare una regione vuota in un indirizzo di applicazione che si adatterebbe alla mappatura di varie pagine di memoria mentre malloc è un punto di allocazione della memoria che alloca un blocco di memoria di dimensioni specificate. La memoria viene impostata al momento dell'esecuzione, il che significa che fino all'esecuzione del programma non è possibile riservare altro spazio.

In alcuni punti, mmap ha ancora un vantaggio rispetto a malloc, non è consigliabile optare per la scelta tra questi due per l'allocazione della memoria poiché mmap divide la memoria e quindi non è in grado di effettuare una chiamata di sistema.

Riferimenti

Differenza tra Mmap e Malloc (con tabella)