malloc과 calloc의 차이

정글일지 21

malloc과 calloc의 차이

malloc 함수와 calloc 함수의 기본적인 차이는 calloc()은 두개의 변수를 취하고 모두 0이라는 bits로 공간이 만들어지는 반면, malloc은 한개의 변수만 취하고 공간의 값이 결정되지 않았다는 것이다(indeterminate).

malloc과 calloc은 메모리를 동적으로 할당하기 위해 사용하는 메모리 관리 함수이다. C언어에서, calloc()이 0으로 초기화된 buffer를 제공하고 malloc()은 메모리를 초기화되지 않은 채로 둔다.

malloc과 callo의 차이를 보기 전에 기두 함수에 대한 기본적인 정보들을 보자.

malloc function in C

malloc은 실행중에 메모리를 할당하는 메모리 관리 함수이다. 값이 정해지지 않고 크기에 의해 구체화된 크기를 가진 객체를 위한 공간을 할당한다.

malloc의 문법

void *malloc(size_t size);

한도

크기 => 할당할 바이트의 수

반환 값

성공 : malloc 함수는 할당된 공간을 가리키는 포인터를 반환한다. 메모리 누출을 피하기 위해 free() 나 realloc()으로 할당된 메모리를 비할당화해야 한다

실패 : null 포인터를 지칭한다.

malloc과 관련된 중요한 초점

  1. malloc 함수는 헤더 파일에 stdlib.h을 선언한다.
  2. malloc 함수는 한개의 변수를 취한다.
  3. malloc 함수는 ‘size’에 의해 구체화된 크기를 가진 객체를 위한 공간을 할당한다.
  4. 할당된 공간의 값은 결정되지 않았다. 이건 0으로 공간을 할당했다는 뜻이 아니다.
  5. 이용 가능한 공간이 없다면 malloc 함수는 NULL을 반환한다.

예시코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char* ptr = NULL;
    // malloc() allocate the memory for 10 characters
    // containing garbage values
    ptr = (char*)malloc(10 * sizeof(char)); // 10*1bytes = 10 bytes
    if(ptr == NULL)
    {
        return (0);
    }
    printf("Enter the name = ");
    fgets(ptr,9,stdin);
    printf("Read data = %s\n\n",ptr);
    // Deallocates memory previously allocated by malloc() function
    free(ptr);
    return (0);
}

calloc function in C

calloc 또한 메모리 관리 함수이고 실행 중에 메모리를 할당한다. 크기 각각이 ‘size’인 nmemb 객체의 배열을 위한 공간을 할당한다. 공간은 모두 0 비트 값으로 초기화 된다.

calloc 문법

**void** *calloc(size_t nmemb, size_t size);

calloc과 관련된 중요한 초점

  1. calloc 함수는 헤더파일에 stdlib.h를 선언한다.
  2. calloc 함수는 2개의 변수를 취한다.
  3. calloc 함수는 크기가 각각 ‘size’인 nmemb 객체의 배열을 위한 공간을 할당한다.
  4. 모든 할당된 공간은 0 비트로 초기화된다.
  5. calloc 함수는 null 포인터나 할당된 공간을 가리키는 포인터를 반환한다.

예시코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char* ptr = NULL;
    // calloc() allocate the memory for 10 characters and
    // set 0 to all of them
    ptr = (char*)calloc(10, sizeof(char));
    if(ptr == NULL)
    {
        return (0);
    }
    printf("Enter the name = ");
    fgets(ptr,9,stdin);
    printf("Read data = %s\n\n",ptr);
    // Deallocates memory previously allocated by malloc() function
    free(ptr);
    return (0);
}

malloc 함수와 calloc 함수의 차이점

BASIS OF COMPARISON MALLOC() CALLOC()
문법 void *malloc(size_t size); void *calloc(size_t nmemb, size_t object_size);
블록 갯수 요구된 메모리만큼 단일 블록 지정 요구된 메모리만큼 다양한 블록 지정
변수의 갯수 한 개 두 개
초기화 malloc()은 할당된 메모리를 초기화하지 않음 0으로 초기화 된다.
기본 값 결정되지 않은 값 0
할당 방법 malloc()은 힙에서 ‘size’ 크기의 메모리를 할당 nmemb 객체 크기와 동일하게 메모리를 할당
속도 빠름 비교적 느림

출처 : https://aticleworld.com/difference-between-malloc-and-calloc/