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 números inteiros, flutuantes, duplos, caracteres etc. Também existem estruturas de dados que podem armazenar uma coleção seqüencial de tamanho fixo de elementos do mesmo tipo. É uma matriz. O programador deve declarar o tamanho da matriz. Se o programador declara uma matriz de números 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 possui quatro funções para alocação dinâmica de memória. calloc e malloc são duas dessas funções. o diferença chave entre calloc e malloc é que calloc aloca a memória e também inicializa os blocos de memória alocados a zero, enquanto malloc aloca a memória, mas não inicializa essa memória alocada a zero. Acessar o conteúdo no calloc fornecerá zero, mas o malloc fornecerá um valor de lixo.
1. Visão geral e principais diferenças
2. O que é calloc
3. O que é malloc
4. Semelhanças entre calloc e malloc
5. Comparação lado a lado - calloc vs malloc em forma de tabela
6. Resumo
Alocação de memória é o processo de atribuir memória aos 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 mantêm o endereço de outra variável.
Figura 01: calloc e malloc
calloc significa "alocação contígua". 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 nulo, portanto, um operador de conversão é usado para retornar o tipo de ponteiro de acordo com o tipo de dados necessário.
void * calloc (tamanho_t num, size_t tamanho);
Consulte o programa C simples abaixo.
#incluir
#incluir
int main ()
int ptr * = (int *) calloc (20, tamanho de (int));
if (ptr == NULL)
printf (“A memória não está alocada”);
outro
printf ("A memória está alocada");
retornar 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 número inteiro. O sizeof (int) é usado porque o tipo inteiro varia de compilador para compilador.
Se a alocação de memória for bem-sucedida, ele 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 em zeros. Irá imprimir a mensagem Memória alocada. Se a alocação de memória não for bem-sucedida, ele retornará o ponteiro nulo. Portanto, imprimirá a mensagem Memória não alocada.
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 (tamanho_t_size);
A função malloc retorna um ponteiro nulo, 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 C simples abaixo com a função malloc.
#incluir
#incluir
int main ()
int ptr * = (int *) malloc (10 * sizeof (int));
if (ptr == NULL)
printf (“A memória não está alocada”);
outro
printf ("A memória está alocada");
retornar 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 houver memória alocada, a mensagem será impressa. Se a memória não estiver alocada, um ponteiro nulo retornará. Portanto, a mensagem de memória não alocada será impressa.
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 ao void * calloc (size_t_num, size_t size); | malloc segue uma sintaxe semelhante ao void * malloc (size_t_size);. |
Número de argumentos | |
calloc leva dois argumentos. São vários blocos e tamanho de cada bloco. | malloc leva um argumento. É um número de bytes. |
Rapidez | |
O calloc leva pouco mais que o malloc. Isso ocorre devido à etapa extra de inicializar a memória alocada por zero. | malloc é mais rápido que calloc. |
Na alocação de memória estática, como nos 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 é pequena 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 o calloc aloca 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 os blocos de memória para zero. Malloc leva dois argumentos enquanto calloc leva dois argumentos.
Você pode fazer o download da 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
1.Kumar, Krishan. "Diferença entre Malloc e Calloc em C." Cs-Fundamentals.com, Cs-Fundamentals.com. Disponivel aqui
2. "Alocação dinâmica de memória C". Wikipedia, Wikimedia Foundation, 13 de janeiro de 2018. Disponível aqui
3. “Calloc () versus malloc ().” GeeksforGeeks, 14 de junho de 2017. Disponível aqui