산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

malloc() 대 calloc():예제와 함께 설명된 주요 차이점

malloc과 calloc의 차이점을 배우기 전에 먼저 알아봅시다-

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

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

malloc()이란 무엇입니까?

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

반환된 포인터는 일반적으로 void 유형입니다. 그것은 우리가 모든 포인터에 malloc 함수를 할당할 수 있다는 것을 의미합니다. malloc의 완전한 형태는 메모리 할당입니다.

이 자습서에서는 다음을 배우게 됩니다.

calloc()이란 무엇입니까?

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

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

다음은 malloc()을 사용하는 이유입니다.

왜 calloc()을 사용합니까?

다음은 calloc()을 사용하는 이유입니다.

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개의 메모리 블록을 할당하는 데 사용됩니다. 메모리 공간이 할당된 후 모든 바이트는 0으로 초기화됩니다. 현재 할당된 메모리 공간의 첫 번째 바이트에 있는 포인터를 반환합니다.

C의 malloc() 예제

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

#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번째 정수의 값은 480입니다.

C의 calloc() 예제

아래의 C 언어 프로그램은 처음 10개 항의 합을 계산합니다. 포인터 값이 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

calloc()과 malloc()의 차이점

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

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

주요 차이점:


C 언어

  1. C# 식, 문 및 블록(예제 포함)
  2. C++ do… while 루프 예제
  3. 예제가 있는 C++ 포인터
  4. C++ Char 데이터 유형(예제 포함)
  5. 예제를 사용한 C++ 연산자 오버로딩
  6. 프로그램 예제가 있는 C++ 함수
  7. 예제가 있는 C# 컬렉션 자습서
  8. while과 do-while의 차이점:예제와 함께 설명
  9. 프로그램 예제가 있는 C 라이브러리의 calloc() 함수
  10. 예제가 있는 Python 문자열 count()