그 이유는 calloc 함수의 목적을 안다면 알 수 있는데,

calloc은 Contiguous memory allocation(연속 메모리 할당)의 약자이다.

쉽게 말해 배열을 위한 동적 메모리 공간을 할당하기 위한 함수인 셈이다.

그래서 calloc은 인자도 malloc처럼 할당할 메모리 크기만 받는 게 아니라 원소 개수와 원소의 메모리 크기를 입력 받는다.


void* calloc (size_t num, size_t size);


그렇다면 상대적으로 malloc은 배열이 아닌 스칼라 값(일반 자료형, 포인터, 구조체, 공용체 등)을 위한 것임을

알 수 있는데, 왜 malloc에서는 0으로 초기화하지 않는 것일까? 어느 문서에서도 그 이유를 명시하고 있지는 않지만,

추측컨대 구조체의 경우 필드 중에서는 목적에 따라 사용하지 않는 필드도 있을 것이고, 또 byte alignment를 위한

padding용 공간도 있을 수 있다. 또 각 필드에 대해서 0이 초기값이라는 보장도 없다. 그래서 스스로 초기화 구문을 짜라는

의도가 아니었나 싶다.