malloc()과 calloc()의 차이점
malloc()과 calloc()의 주요 차이점
- malloc() 함수는 시작 주소만 반환하고 XNUMX으로 만들지 않는 반면, calloc() 함수는 시작 주소를 반환하고 XNUMX으로 만듭니다.
- malloc 함수에서는 인수 개수가 1개이고, calloc 함수에서는 인수 개수가 2개입니다.
- 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()을 사용하십시오.