malloc()과 calloc()의 차이점

malloc()과 calloc()의 주요 차이점

  • malloc() 함수는 시작 주소만 반환하고 XNUMX으로 만들지 않는 반면, calloc() 함수는 시작 주소를 반환하고 XNUMX으로 만듭니다.
  • malloc 함수에서는 인수 개수가 1개이고, calloc 함수에서는 인수 개수가 2개입니다.
  • malloc() 시간 효율성은 calloc()보다 높지만 malloc()은 calloc()에 비해 안전하지 않습니다.
  • malloc은 메모리를 초기화하지 않지만 calloc은 메모리 초기화를 수행합니다.
malloc() 대 calloc()
malloc() 대 calloc()

동적 메모리 할당이란 무엇입니까?

다이니믹한 메모리 할당 런타임에 메모리를 할당하는 프로세스입니다. calloc(), free(), 네 가지 라이브러리 루틴이 있습니다. 진짜 할당(), 프로그램 실행 중에 메모리를 할당하고 해제하는 데 사용할 수 있는 malloc() 등이 있습니다. 이러한 루틴은 stdlib.h라는 헤더 파일에 정의되어 있습니다.

malloc()이란 무엇입니까?

메모리 블록을 동적으로 할당하는 데 사용되는 함수입니다. 지정된 크기의 메모리 공간을 예약하고 메모리 위치를 가리키는 널 포인터를 반환합니다.

반환된 포인터는 일반적으로 void 유형입니다. 이는 모든 포인터에 malloc 함수를 할당할 수 있음을 의미합니다. malloc의 전체 형태는 메모리 할당입니다.

calloc()이란 무엇입니까?

Calloc() 함수 여러 블록의 메모리를 할당하는 데 사용됩니다. 배열 및 구조와 같은 복잡한 데이터 구조에 메모리를 할당하는 데 사용되는 동적 메모리 할당 함수입니다. 이 함수가 지정된 대로 충분한 공간을 할당하지 못하면 null 포인터를 반환합니다. calloc 함수의 전체 형식은 연속 할당입니다.

malloc()과 calloc()의 차이점

malloc()과 calloc()의 중요한 차이점은 다음과 같습니다.

malloc () 호출()
Malloc() 함수는 사용자가 지정한 크기의 단일 메모리 블록을 생성합니다. Calloc() 함수는 변수에 대해 여러 메모리 블록을 할당할 수 있습니다.
Malloc 함수에 쓰레기 값이 포함되어 있습니다. calloc 함수에 의해 할당된 메모리 블록은 항상 XNUMX으로 초기화됩니다.
인수 수는 1입니다. 인수 수는 2입니다.
Calloc은 malloc보다 느립니다. Malloc은 calloc보다 빠릅니다.
calloc에 ​​비해 안전하지 않습니다. malloc에 ​​비해 사용하기 안전합니다.
calloc()보다 시간 효율성이 더 높습니다. 시간 효율성은 malloc()보다 낮습니다.
Malloc() 함수는 시작 주소만 반환하고 XNUMX으로 만들지 않습니다. 주소를 할당하기 전에 Calloc() 함수는 시작 주소를 반환하고 이를 XNUMX으로 만듭니다.
메모리 초기화를 수행하지 않습니다. 메모리 초기화를 수행합니다.

malloc() 구문

다음은 malloc()의 구문입니다.

ptr = (cast_type *) malloc (byte_size);

위 구문에서 ptr은 Cast_type의 포인터입니다. malloc 함수는 byte_size의 할당된 메모리에 대한 포인터를 반환합니다.

Example: ptr = (int *) malloc (50)

이 명령문이 성공적으로 실행되면 50바이트의 메모리 공간이 예약됩니다. 예약된 공간의 첫 번째 바이트의 주소는 int 유형의 포인터 "ptr"에 할당됩니다.

calloc() 구문

다음은 malloc()의 구문입니다.

ptr = (cast_type *) calloc (n, size);

위의 구문은 동일한 크기의 n개의 메모리 블록을 할당하는 데 사용됩니다. 메모리 공간이 할당된 후 모든 바이트는 XNUMX으로 초기화됩니다. 현재 할당된 메모리 공간의 첫 번째 바이트에 있는 포인터가 반환됩니다.

C의 malloc() 예

다음 코드에서 sizeof(*ptr)는 15개의 정수로 구성된 메모리 블록을 할당하는 데 사용됩니다. printf 문에서 여섯 번째 정수 값을 찾습니다.

#include<stdlib.h>
#include<stdio.h>
int main(){
int *ptr;
ptr = malloc(15 * sizeof(*ptr)); 
    if (ptr != NULL) {
      *(ptr + 5) = 480; 
      printf("Value of the 6th integer is %d",*(ptr + 5));
    }
}

출력:

여섯 번째 정수의 값은 6입니다.

C의 calloc() 예

아래 C 언어 프로그램은 처음 XNUMX개 항의 합을 계산합니다. 포인터 값이 null이면 메모리 공간이 할당되지 않습니다.

For 루프는 변수 "i"의 값을 반복하고 합계를 인쇄하는 데 사용됩니다. 마지막으로 함수 free는 포인터를 해제하는 데 사용됩니다.

#include <stdio.h>
#include <stdlib.h>
    int main() {
        int i, * ptr, sum = 0;
        ptr = calloc(10, sizeof(int));
        if (ptr == NULL) {
            printf("Error! memory not allocated.");
            exit(0);
        }
        printf("Building and calculating the sequence sum of the first 10 terms \n");
        for (i = 0; i < 10; ++i) { * (ptr + i) = i;
            sum += * (ptr + i);
        }
        printf("Sum = %d", sum);
        free(ptr);
        return 0;
    }

출력:

처음 10개 항의 시퀀스 합 작성 및 계산 n Sum = 45

왜 malloc()을 사용하는가?

malloc()을 사용하는 이유는 다음과 같습니다.

  • 런타임에 메모리를 할당해야 하는 경우 malloc()을 사용해야 합니다.
  • 현재 메모리 블록의 실행 이후에 존재해야 하는 객체를 할당해야 하는 경우 malloc을 사용해야 합니다.
  • 해당 스택 크기보다 큰 메모리를 할당해야 하는 경우 malloc()을 사용하세요.
  • 할당된 공간의 첫 번째 바이트에 대한 포인터를 반환합니다.
  • 이를 통해 개발자는 필요한 만큼 정확한 양의 메모리를 할당할 수 있습니다.
  • 이 함수는 힙에서 바이트 단위의 메모리 블록 크기를 할당합니다.

calloc() 을 사용하는 이유는 무엇입니까?

calloc()을 사용하는 이유는 다음과 같습니다.

  • 할당된 메모리를 XNUMX으로 설정해야 하는 경우.
  • 포인터를 반환하는 calloc을 사용하여 메모리 힙에 액세스할 수 있습니다.
  • 메모리에 대한 포인터를 반환하기 위해 요소를 XNUMX으로 초기화해야 할 때 사용됩니다.
  • malloc()으로 발생할 수 있는 오버플로를 방지하려면
  • 이미 XNUMX으로 설정된 것으로 알려진 페이지를 요청하려면 calloc()을 사용하십시오.