In C - un linguaggio di programmazione progettato da Dennis Ritchie presso AT & T Bell Laboratories nei primi anni 1970 - la funzione malloc è un mezzo di allocare dinamicamente la memoria , o in risposta alla domanda , piuttosto che in termini assoluti . A volte i programmatori non sanno come sarà necessaria molta memoria per i dati nel momento in cui stanno scrivendo un programma , in modo da malloc consente loro di allocare dinamicamente la memoria dopo l'avvio del programma in esecuzione . Allocazione memoria
Per impostazione predefinita , la funzione malloc alloca un blocco di memoria contigua , o adiacenti , in una zona conosciuta come un cumulo , a cui si accede da un programma per memorizzare i dati e le variabili . La funzione malloc accetta un singolo argomento , un numero intero lungo o 32 bit che rappresenta il numero di byte da allocare dal mucchio . La funzione malloc chiede al sistema di un blocco di memoria della dimensione specificata e restituisce un puntatore - un indirizzo, dal punto di vista del linguaggio di programmazione - . Al primo elemento del blocco
valore restituito
computer hanno solo una quantità limitata di memoria , quindi è possibile che la funzione malloc per richiedere più memoria di quella fisicamente disponibile e causare un crash del programma . Se non abbastanza memoria disponibile , malloc restituisce un puntatore nullo , o un puntatore con un valore pari a zero . Per impedire che un programma di crash , i programmatori devono verificare in modo esplicito che la malloc non ha restituito nulla , in modo che sappiano che la memoria richiesta è stata assegnata con successo prima di utilizzarlo .
Rilascio di memoria
Allo stesso modo , un computer può non perennemente allocare più memoria - e sovrascrivere ripetutamente un puntatore che punta alla memoria allocati dinamicamente, possono portare a dati diventano inaccessibili . Memoria allocati dinamicamente, deve quindi essere liberato di nuovo il pool di memoria di sistema , utilizzando la funzione di libero , una volta che non è più necessaria . Una volta che un processo termina , tutta la memoria allocati dinamicamente, viene rilasciato di nuovo al pool di memoria .
Sintassi
Malloc restituisce un puntatore generico , o un puntatore a void , ma il puntatore può essere scritto , o typecast , per indicare il tipo di dati a cui punta . La sintassi "char * str = ( char * ) malloc ( 40 ) , " per esempio , alloca la memoria per una stringa lunga 40 caratteri . In alternativa , i programmatori possono dichiarare un puntatore e richiamare malloc quando vogliono fare spazio per gli elementi di un array . Tuttavia, è importante notare che la funzione malloc alloca memoria di sola . E non si svuota o altrimenti inizializzare la memoria si alloca .