추천, 2024

에디터의 선택

malloc과 calloc의 차이점

malloc과 calloc 함수의 근본적인 차이점은 calloc ()malloc ()에 필요한 하나의 인수 대신 두 개의 인수가 필요하다는 것입니다. malloc ()과 calloc ()은 C 프로그래밍 언어가 런타임에 동적 메모리 할당과 할당 해제를 제공하는 함수입니다.

malloc ()과 calloc () 함수를 이해하기 전에 먼저 동적 메모리 할당의 의미를 이해하게하십시오. 메모리 할당 은 프로그램 및 프로세스의 실행을 위해 컴퓨터 메모리를 할당하는 절차입니다. 프로그램과 프로세스에 필요한 메모리 공간이 얼마인지 알 수 없을 때 동적 할당 기술을 사용합니다.

정적 메모리 할당과 관련된 문제로 인해 동적 메모리 할당이 발생합니다. 예를 들어 더 적은 수의 요소가 저장되면 나머지 메모리는 불필요하게 낭비됩니다. 따라서 메모리가 필요할 때만 할당되는 정적 메모리 할당 문제를 극복합니다.

비교 차트

비교의 기초malloc ()calloc ()
블록 수요청 된 메모리의 단일 블록을 할당합니다.
요청 된 메모리의 여러 블록을 할당합니다.
통사론void * malloc (size_t size);void * calloc (size_t num, size_t size);
초기화malloc ()은 할당 된 메모리를 초기화하지 않습니다.할당 된 메모리는 calloc ()을 사용하여 0으로 초기화됩니다.
배분 방식malloc () 함수는 힙에서 '크기'크기의 메모리를 할당합니다.calloc () 함수는 크기가 num * size 인 메모리를 할당합니다.
속도빠른비교적 천천히.

malloc ()의 정의

malloc 함수 는 메모리 블록을 바이트 단위로 할당 합니다 . 사용자는 명시 적으로 블록 크기를 지정해야하며, 사용하려면 블록 크기를 지정해야합니다.

malloc 함수 프로그램은 메모리 할당을 위해 시스템의 RAM을 요청하고, 요청이 승인되면 (즉, malloc 함수는 메모리를 할당하는 데 성공했다고 말함) 메모리의 첫 번째 블록에 대한 포인터를 반환합니다. 그것은 void 타입 의 포인터를 반환하는데, 이는 모든 유형의 포인터가 할당 될 수 있음을 의미합니다.

비록 malloc 함수가 필요한 양의 메모리를 할당 할 수 없다면 NULL을 반환합니다. malloc 함수는 TURBO C, 헤더 파일 인 alloc.h 또는 stdlib.h 에서 액세스 할 수 있으며 UNIX에서는 헤더 파일에서 사용할 수 있습니다 .

통사론

이 함수의 구문은 다음과 같습니다.

malloc(number of elements * size of each element);

예를 들어,
int *ptr;
ptr=malloc(10*sizeof (int))

여기서 size는 필요한 메모리 크기 (바이트 단위)를 나타냅니다 (즉, 할당 할 연속 메모리 위치의 수).

그러나 앞에서 언급했듯이 malloc 함수는 무효 포인터를 반환하므로 필요에 따라 반환 된 포인터 유형을 변경하려면 캐스트 연산자가 필요합니다. 위의 선언은 다음 형식으로 나타낼 수 있습니다.

ptr_var=(type_cast* ) malloc (size)

여기서 ptr_var 은 할당 된 메모리 블록의 시작 주소를 유지하는 포인터의 이름입니다. type_cast 는 반환 된 포인터 (또는 유형 void)가 변환 될 데이터 유형이며 size는 할당 된 메모리 블록의 크기를 바이트 단위로 나타냅니다 .

예 :
int *ptr;
ptr=(int*) malloc (10 * size of (int));

malloc 함수에 의해 할당 된 메모리 는 가비지 값을 포함합니다 .

해당 요청이 malloc에 ​​의해 생성되어 시스템 RAM에 의해 부여 된 메모리를 할당했는지 또는 요청 된 공간을 사용할 수없는 경우에 거부되었는지 확인합니다. 필요한만큼의 메모리가 할당되지 않은 속성을 사용할 수 있습니다. malloc 함수는 NULL을 반환합니다.

calloc ()의 정의

calloc 함수는 malloc ()의 경우처럼 두 개의 인수가 필요하다는 사실을 제외하고 malloc 함수와 정확히 동일하게 동작합니다. 단 하나의 인수 만 필요합니다.

예 :
int*ptr;
ptr = (int*)calloc(10, 2);

여기서 2 는 우리가 할당이 이루어 지길 원하는 바이트의 데이터 유형의 크기를 지정합니다.이 경우에는 정수의 경우 2입니다. 그리고 10은 할당 할 요소의 수를 나타냅니다.

malloc 함수에 전달 된 인수는 (n * 10), 여러 인수가 항상 쉼표로 구분되기 때문에 혼동하지 말아야한다는 것을 기억하십시오. 인수 (n * 10)에는 쉼표가 없습니다. 그러므로 그것은 단 하나의 논증이지만 단순한 표현이 아니라 표현입니다.

위의 선언으로 돌아가서 위의 명령문을 실행 한 후 20 바이트의 메모리 블록이 요청 프로그램에 할당되고 첫 번째 블록의 주소가 요청 프로그램에 할당되고 첫 번째 블록의 주소가 포인터에 할당됩니다 ptr.

calloc 함수에 의해 할당 된 메모리는 모두 0을 유지합니다. calloc 함수는 또한 헤더 파일에서 얻을 수있다. 또는 터보 C.

malloc과 calloc의 주요 차이점

malloc과 calloc 함수의 주요 차이점은 다음과 같습니다.

  1. 요청 된 메모리의 단일 블록은 malloc에 ​​할당되는 반면, 요청 된 메모리의 여러 블록은 calloc에 ​​의해 할당됩니다.
  2. malloc 함수는 할당 된 메모리를 지우거나 초기화하지 않습니다. 그것은 쓰레기 값을 포함하고 할당 된 메모리의 항목은 변경할 수 없습니다. 반대로, calloc은 할당 된 메모리를 0으로 초기화한다.
  3. malloc은 calloc보다 빠른 초기화 단계가 필요하기 때문에 calloc보다 빠르지 만 그 차이는 무시할 만하다.
  4. 이 두가지의 또 다른 차이점은 calloc은 malloc + memset이고 memset은 물리적 페이지를 메모리에 할당하는 반면 malloc은 가상 주소의 힙에있는 메모리 만 할당한다는 것입니다.

결론:

malloc과 calloc 함수는 모두 메모리를 할당하는 데 사용되며 특정 이점이 있으며 malloc과 같은 단점은 calloc에 ​​비해 빠릅니다. 게다가 calloc은 메모리를 할당하고 메모리 영역을 0으로 초기화하기 때문에 malloc은 사용하기가 더 쉽다. 그러나 변수 초기화 가 더 중요 할 때 calloc을 사용하는 것을 선호합니다.

Top