Key Difference – calloc vs malloc
Na programação é necessário armazenar dados. Os dados são armazenados na memória. Esses locais de memória são conhecidos como variáveis. Cada variável tem um tipo específico. Eles podem ser inteiros, floats, doubles, caracteres etc. Existem também estruturas de dados que podem armazenar uma coleção sequencial de tamanho fixo de elementos do mesmo tipo. É uma matriz. O programador deve declarar o tamanho do array. Se o programador declara um array de inteiros para cinco elementos, não é possível atribuir um valor a um índice maior que o tamanho declarado. A alocação de memória é fixa e não pode ser alterada em tempo de execução. Outro método de alocação de memória é a alocação dinâmica de memória. A alocação dinâmica de memória ajuda a alocar mais memória quando necessário e liberar quando necessário. O arquivo de cabeçalho tem quatro funções para alocação dinâmica de memória. calloc e malloc são duas dessas funções. A principal diferença entre calloc e malloc é que calloc aloca a memória e também inicializa os blocos de memória alocados para zero, enquanto o malloc aloca a memória, mas não inicializa essa memória alocada para zero. Acessar o conteúdo em calloc dará zero, mas malloc dará um valor lixo.
O que é calloc?
Alocação de memória é o processo de atribuição de memória para os programas em execução. Às vezes é necessário alterar o tamanho da memória. Portanto, a alocação dinâmica de memória é usada. Isso é feito usando ponteiros. Ponteiros são variáveis de referência que guardam o endereço de outra variável.
Figura 01: calloc e malloc
calloc significa “alocação contígua”. Ele aloca vários blocos de memória com o mesmo tamanho. A sintaxe para calloc é a seguinte. São necessários dois argumentos. Eles são o número de blocos e o tamanho de cada bloco. A função calloc retorna um ponteiro void, portanto, um operador de conversão é usado para retornar o tipo de ponteiro de acordo com o tipo de dados necessário.
voidcalloc(size_t num, size_t size);
Consulte o programa simples em C abaixo.
include
include
int main(){
int ptr=(int) calloc(20, sizeof(int));
if (ptr==NULL){
printf(“A memória não está alocada”);
}
else{
printf(“A memória está alocada”);
}
return 0;
}
De acordo com o programa acima, um bloco contíguo de memória que pode conter 20 elementos é alocado. Cada um terá o tamanho de um inteiro. O sizeof(int) é usado porque o tipo inteiro varia de compilador para compilador.
Se a alocação de memória for bem sucedida, retornará o endereço base do bloco de memória. Isso significa que o ponteiro ptr agora está apontando para o endereço base desse bloco de memória. Todas as regiões alocadas são inicializadas com zeros. Ele imprimirá a mensagem Memória Alocada. Se a alocação de memória não for bem-sucedida, ele retornará o ponteiro nulo. Portanto, ele imprimirá a mensagem Memória não alocada.
O que é malloc?
A função malloc é usada para alocar a quantidade necessária de bytes na memória. A sintaxe para malloc é a seguinte. O tamanho representa a memória necessária em bytes.
void malloc(size_t_size);
A função malloc retorna um ponteiro void, portanto, um operador de conversão é usado para retornar o tipo de ponteiro de acordo com o tipo de dados necessário.
Consulte o programa simples em C abaixo com a função malloc.
include
include
int main(){
int ptr=(int) malloc (10sizeof(int));
if (ptr==NULL){
printf(“A memória não está alocada”);
}
else{
printf(“A memória está alocada”);
}
return 0;
}
De acordo com o programa acima, o bloco de memória será alocado. O ponteiro está apontando para o endereço inicial da memória alocada. O ponteiro retornado é convertido em um tipo inteiro. Se a memória estiver alocada, ele imprimirá a mensagem de memória alocada. Se a memória não for alocada, um ponteiro nulo retornará. Portanto, a mensagem de memória não alocada será impressa.
Quais são as semelhanças entre calloc e malloc?
- Ambas as funções são declaradas no arquivo de cabeçalho. É o arquivo de cabeçalho da biblioteca padrão.
- Ambas as funções são usadas para alocação dinâmica de memória.
- O ponteiro retornado por calloc e malloc deve ser convertido no tipo específico.
- Na alocação de memória bem-sucedida, ambas as funções retornarão um ponteiro com o endereço base do bloco de memória.
- Se a alocação de memória não for bem sucedida, um ponteiro nulo será retornado.
Qual é a diferença entre calloc e malloc?
calloc vs malloc |
|
calloc é uma função para alocação dinâmica de memória no arquivo de cabeçalho stdlib.h da linguagem C que aloca um número específico de bytes e os inicializa em zero. | malloc é uma função para alocação dinâmica de memória no arquivo de cabeçalho stdlib.h da linguagem C que aloca um número específico de bytes. |
Significado | |
calloc significa alocação contígua. | malloc significa alocação de memória. |
Sintaxe | |
calloc segue uma sintaxe semelhante a void calloc(size_t_num, size_t size); | malloc segue uma sintaxe semelhante a void malloc(size_t_size);. |
Número de argumentos | |
calloc recebe dois argumentos. Eles são um número de blocos e tamanho de cada bloco. | malloc recebe um argumento. É um número de bytes. |
Velocidade | |
calloc demora um pouco mais que malloc. Isso é por causa da etapa extra de inicializar a memória alocada por zero. | malloc é mais rápido que calloc. |
Resumo – calloc vs malloc
Na alocação de memória estática, como por exemplo, usando arrays, a memória é fixa. Se poucos elementos forem armazenados, o restante da memória será desperdiçado. Também pode causar erros quando a memória alocada for menor que a memória necessária. Portanto, a alocação dinâmica de memória é usada. Na linguagem C, calloc e malloc fornecem alocação dinâmica de memória. A diferença entre calloc e malloc é que calloc aloca memória e também inicializa os blocos de memória alocados para zero, enquanto malloc aloca a memória, mas não inicializa os blocos de memória para zero. Malloc recebe dois argumentos enquanto calloc recebe dois argumentos.
Baixe o PDF de calloc vs malloc
Você pode baixar a versão em PDF deste artigo e usá-la para fins offline conforme nota de citação. Faça o download da versão em PDF aqui: Diferença entre calloc e malloc