Diferència clau: calloc vs malloc
En programació, cal emmagatzemar dades. Les dades s'emmagatzemen a la memòria. Aquestes ubicacions de memòria es coneixen com a variables. Cada variable té un tipus específic. Poden ser nombres enters, flotants, dobles, caràcters, etc. També hi ha estructures de dades que poden emmagatzemar una col·lecció seqüencial de mida fixa d'elements del mateix tipus. És una matriu. El programador ha de declarar la mida de la matriu. Si el programador declara una matriu d'enters per a cinc elements, no és possible assignar un valor a un índex superior a la mida declarada. L'assignació de memòria és fixa i no es pot canviar en temps d'execució. Un altre mètode d'assignació de memòria és l'assignació de memòria dinàmica. L'assignació de memòria dinàmica ajuda a assignar més memòria quan sigui necessari i alliberar-la quan sigui necessari. El fitxer de capçalera té quatre funcions per a l'assignació de memòria dinàmica. calloc i malloc són dues d'aquestes funcions. La diferència clau entre calloc i malloc és que calloc assigna la memòria i també inicialitza els blocs de memòria assignats a zero, mentre que malloc assigna la memòria però no inicialitza aquesta memòria assignada a zero. Accedint al contingut a calloc donarà zero, però malloc donarà un valor d'escombraries.
Què és calloc?
L'assignació de memòria és el procés d'assignació de memòria per als programes en execució. De vegades cal canviar la mida de la memòria. Per tant, s'utilitza l'assignació de memòria dinàmica. Es fa amb punters. Els punters són variables de referència que contenen l'adreça d'una altra variable.
Figura 01: calloc i malloc
calloc significa "assignació contigua". Assigna diversos blocs de memòria amb la mateixa mida. La sintaxi de calloc és la següent. Calen dos arguments. Són el nombre de blocs i la mida de cada bloc. La funció calloc retorna un punter nul, de manera que s'utilitza un operador d'emissió per al tipus de punter retornat segons el tipus de dades requerit.
voidcalloc(size_t num, size_t size);
Consulteu el programa C senzill a continuació.
inclou
inclou
int main(){
int ptr=(int) calloc(20, sizeof(int));
if (ptr==NULL){
printf(“La memòria no està assignada”);
}
else{
printf(“La memòria està assignada”);
}
retorn 0;
}
Segons el programa anterior, s'assigna un bloc contigu de memòria que pot contenir 20 elements. Cadascun tindrà la mida d'un nombre enter. S'utilitza la mida de (int) perquè el tipus d'enter varia d'un compilador a un altre.
Si l'assignació de memòria és correcta, retornarà l'adreça base del bloc de memòria. Vol dir que el punter ptr ara apunta a l'adreça base d'aquest bloc de memòria. Totes les regions assignades s'inicialitzen a zeros. Imprimirà el missatge Memòria assignada. Si l'assignació de memòria no té èxit, retornarà el punter nul. Per tant, imprimirà el missatge "La memòria no està assignada".
Què és malloc?
La funció malloc s'utilitza per assignar la quantitat necessària de bytes a la memòria. La sintaxi de malloc és la següent. La mida representa la memòria necessària en bytes.
void malloc(size_t_size);
La funció malloc retorna un punter buit, de manera que s'utilitza un operador d'emissió per tornar el tipus de punter segons el tipus de dades requerit.
Consulteu el programa C senzill a continuació amb funció malloc.
inclou
inclou
int main(){
int ptr=(int) malloc (10sizeof(int));
if (ptr==NULL){
printf(“La memòria no està assignada”);
}
else{
printf(“La memòria està assignada”);
}
retorn 0;
}
Segons el programa anterior, s'assignarà un bloc de memòria. El punter apunta a l'adreça inicial de la memòria assignada. El punter retornat es converteix en un tipus enter. Si s'assigna memòria, imprimirà el missatge d'assignació de memòria. Si la memòria no està assignada, tornarà un punter nul. Per tant, la memòria no està assignada s'imprimirà el missatge.
Quines similituds hi ha entre calloc i malloc?
- Aquestes funcions es declaren al fitxer de capçalera. És el fitxer de capçalera de la biblioteca estàndard.
- Les dues funcions s'utilitzen per a l'assignació de memòria dinàmica.
- El punter retornat per calloc i malloc s'hauria de llançar al tipus específic.
- En una assignació de memòria correcta, ambdues funcions retornaran un punter amb l'adreça base del bloc de memòria.
- Si l'assignació de memòria no té èxit, es retornarà un punter nul.
Quina diferència hi ha entre calloc i malloc?
calloc vs malloc |
|
calloc és una funció per a l'assignació de memòria dinàmica al fitxer de capçalera stdlib.h en llenguatge C que assigna un nombre específic de bytes i els inicialitza a zero. | malloc és una funció per a l'assignació de memòria dinàmica al fitxer de capçalera stdlib.h en llenguatge C que assigna un nombre específic de bytes. |
Significat | |
calloc significa assignació contigua. | malloc significa assignació de memòria. |
Sintaxi | |
calloc segueix una sintaxi semblant a void calloc(size_t_num, size_t size); | malloc segueix una sintaxi semblant a void malloc(size_t_size);. |
Nombre d'arguments | |
calloc pren dos arguments. Són un nombre de blocs i la mida de cada bloc. | malloc pren un argument. És un nombre de bytes. |
Velocitat | |
calloc triga poc més que malloc. Això es deu al pas addicional d'inicialitzar la memòria assignada per zero. | malloc és més ràpid que calloc. |
Resum: calloc vs malloc
En l'assignació de memòria estàtica, com si utilitzem matrius, la memòria és fixa. Si s'emmagatzemen pocs elements, la resta de la memòria es perd. També pot provocar errors quan la memòria assignada és petita que la necessària. Per tant, s'utilitza l'assignació de memòria dinàmica. En llenguatge C, calloc i malloc proporcionen una assignació de memòria dinàmica. La diferència entre calloc i malloc és que calloc assigna memòria i també inicialitza els blocs de memòria assignats a zero, mentre que malloc assigna la memòria però no inicialitza els blocs de memòria a zero. Malloc pren dos arguments mentre que calloc pren dos arguments.
Baixa el PDF de calloc vs malloc
Podeu descarregar la versió PDF d'aquest article i utilitzar-la per a finalitats fora de línia segons la nota de citació. Descarregueu la versió PDF aquí: Diferència entre calloc i malloc