C Programmazione

COME USARE LA FUNZIONE MALLOC IN C

COME USARE LA FUNZIONE MALLOC IN C
Malloc è una funzione incorporata dichiarata nel file di intestazione . Malloc è il nome breve per "allocazione della memoria" e viene utilizzato per allocare dinamicamente un singolo grande blocco di memoria contigua in base alla dimensione specificata. Esistono due tipi di allocazione della memoria statica e dinamica. L'allocazione della memoria statica viene eseguita in fase di compilazione e non cambia in fase di esecuzione. L'allocazione dinamica della memoria sta allocando la memoria in fase di esecuzione per questo; usiamo malloc. Ora il punto è da dove proviene questa memoria, quindi tutti i requisiti dinamici in C sono soddisfatti dalla memoria heap. Fondamentalmente, la nostra applicazione/programma avrà 3 tipi di memoria

  • La memoria dello stack è locale per ogni metodo e, quando il metodo ritorna, lo stack lo cancella automaticamente.
  • L'area di memoria globale alloca memoria per tutte le variabili globali. Questa area di memoria viene creata all'inizio del programma e alla fine cancella automaticamente l'area di memoria.
  • La memoria heap è sempre in grado di soddisfare tutti i requisiti dinamici del programma/applicazione. Ogni volta che useremo la funzione malloc, prenderà in prestito della memoria dall'heap e ci darà il puntatore ad essa.

Sintassi:

La sintassi di malloc è (void*)malloc(size_t size). Quindi la sintassi dice che malloc richiede una dimensione, restituirà il puntatore fondamentalmente un puntatore void e la dimensione t è definita in come un intero senza segno. La funzione Malloc alloca semplicemente un blocco di memoria in base alla dimensione specificata nell'heap come puoi vedere nella sintassi che la dimensione deve essere specificata e, in caso di successo, restituisce un puntatore che punta al primo byte della memoria allocata altrimenti restituisce NULL. Quindi, il compito di malloc è allocare memoria durante l'esecuzione.

Perché il puntatore vuoto:

Malloc non ha idea di cosa stia puntando; significa semplicemente che non sa quali dati verranno archiviati in quella posizione di memoria. Si limita ad allocare la memoria richiesta dall'utente senza conoscere il tipo di dati da memorizzare all'interno della memoria. Ecco perché restituisce un puntatore vuoto.

Malloc alloca semplicemente la memoria dopodichéèresponsabilità dell'utente eseguire il typecast su un tipo appropriato in modo che possa essere utilizzato correttamente nel programma. Il puntatore void è un puntatore che può puntare qualsiasi tipo di dati malloc restituisce il puntatore void perché non sa quale tipo di dati verrà archiviato all'interno di quella memoria.

Qui stiamo chiedendo a malloc di allocare 6 byte di memoria ora se ha successo malloc restituirà un puntatore void. In tal caso, dobbiamo digitarlo su un puntatore di tipo intero perché vogliamo memorizzare un numero intero in quella memoria. Qui malloc alloca 6 byte di memoria in un heap e l'indirizzo del primo byte è memorizzato nel puntatore ptr.

Programma di esempio:

Ecco un semplice programma di esempio per comprendere correttamente il concetto di malloc.

Qui puoi vedere con la funzione printf sto chiedendo all'utente di inserire il numero di interi. Abbiamo dichiarato due variabili sopra i e n. La variabile n è il luogo in cui memorizzeremo il numero inserito dall'utente. Dopodiché, abbiamo la funzione malloc; vogliamo che il malloc allochi il dimensionamento equivalente alla dimensione di n interi. Stiamo moltiplicando size se int con n; questo ci darà la dimensione di n interi. Dopodiché, malloc restituirà un puntatore void e lo stiamo digitando su un puntatore intero e stiamo memorizzando l'indirizzo all'interno del puntatore ptr. Il typecasting è importante in quanto è una buona pratica.

Ora, se il puntatore contiene NULL, significa che la memoria non è disponibile. Quindi usciremo semplicemente dal programma con lo stato di fallimento dell'uscita. Se questo non è il caso, possiamo facilmente eseguire il ciclo for.

Il ciclo verrà eseguito da 0 a n-1 e chiederemo all'utente di inserire un numero intero uno per uno ogni volta. All'interno della funzione scanf, c'è una cosa scritta ptr+i poiché sappiamo che ptr contiene l'indirizzo del primo byte di memoria. Diciamo che l'indirizzo è 1000 qui i è inizialmente uguale a zero, quindi 1000+0 è 1000, quindi all'interno di quell'indirizzo verrà memorizzato il nostro primo numero intero, dopodiché quando diventerò 1, quindi 1000+1 che è stato interpretato internamente come (1000) +1 *4 se presumo che la dimensione dell'intero sia di 4 byte e sarebbe uguale a 1004, quindi l'intero successivo verrà memorizzato nella posizione 1004. E questo continuerà in questo modo gli indirizzi sono come 1000, 1004, 1008 e così via. Non stiamo usando e commerciale prima di ptr+i perché ptr ci sta già dando l'indirizzo quando scriviamo ptr, che è semplicemente un puntatore, e contiene l'indirizzo, non il valore, quindi non è necessario mettere e commerciale prima di esso, e questo concetto dovrebbe essere chiaro.

Qui in questo ciclo, stiamo semplicemente facendo una cosa: stampare tutti i numeri interi sullo schermo; ovviamente, stiamo usando ptr+i, ma qui, in questo caso, lo stiamo dereferenziando perché ptr+i rappresenta un indirizzo, quindi dobbiamo dereferenziarlo. Se i uguale a 0, sarà 1000 perché stiamo assumendo che il primo indirizzo sarà 1000, quindi lo stiamo dereferenziando; otterremo il primo intero quindi i uguale a 1 e diventerà 1001 ma interpretato come 1004 se la dimensione dell'intero è 4. Ancora. Lo stiamo dereferendo, quindi ci darà il 2nd numero intero. In questo modo funziona tutto.

Quindi, questo è fondamentalmente un semplice programma che chiede agli utenti di inserire n intero, e quindi stiamo semplicemente visualizzando quei numeri interi sullo schermo. Dopo aver eseguito il programma, verrà visualizzato.

Innanzitutto, chiediamo all'utente di inserire il numero di interi, quindi l'utente sta inserendo gli interi e li stiamo semplicemente visualizzando sullo schermo.

Conclusione:

Non c'è niente di sbagliato nel programma di cui sopra fintanto che lo continuiamo per un tempo molto lungo qui stiamo prendendo in prestito la memoria dall'heap, ma non restituiamo mai la memoria all'heap, succede solo nel caso in cui il programma/applicazione hanno correre per una lunga durata come 24 ore. Chiameranno di nuovo la funzione malloc, e di nuovo ciò significa che ogni volta che prendono in prestito memoria dall'heap e non tornano mai, questa è una cattiva programmazione, quindi dovremmo scrivere free (l'indirizzo della memoria che dovrebbe essere rilasciato) prima di tornare. Quindi, ogni volta che è importante usare malloc free. Quindi, usando malloc, abbiamo conservato la memoria e malloc alloca la memoria grande quanto lo chiedi.

Buona allocazione dinamica della memoria!

Installa l'ultimo Dolphin Emulator per Gamecube e Wii su Linux
L'emulatore Dolphin ti consente di giocare ai giochi Gamecube e Wii scelti su Personal Computer Linux (PC). Essendo un emulatore di giochi liberament...
Come utilizzare GameConqueror Cheat Engine in Linux
L'articolo copre una guida sull'utilizzo del motore cheat GameConqueror in Linux. Molti utenti che giocano su Windows utilizzano spesso l'applicazione...
I migliori emulatori di console di gioco per Linux
Questo articolo elencherà il popolare software di emulazione della console di gioco disponibile per Linux. L'emulazione è un livello di compatibilità ...