그 이유는 calloc 함수의 목적을 안다면 알 수 있는데,
calloc은 Contiguous memory allocation(연속 메모리 할당)의 약자이다.
쉽게 말해 배열을 위한 동적 메모리 공간을 할당하기 위한 함수인 셈이다.
그래서 calloc은 인자도 malloc처럼 할당할 메모리 크기만 받는 게 아니라 원소 개수와 원소의 메모리 크기를 입력 받는다.
void* calloc (size_t num, size_t size);
그렇다면 상대적으로 malloc은 배열이 아닌 스칼라 값(일반 자료형, 포인터, 구조체, 공용체 등)을 위한 것임을
알 수 있는데, 왜 malloc에서는 0으로 초기화하지 않는 것일까? 어느 문서에서도 그 이유를 명시하고 있지는 않지만,
추측컨대 구조체의 경우 필드 중에서는 목적에 따라 사용하지 않는 필드도 있을 것이고, 또 byte alignment를 위한
padding용 공간도 있을 수 있다. 또 각 필드에 대해서 0이 초기값이라는 보장도 없다. 그래서 스스로 초기화 구문을 짜라는
의도가 아니었나 싶다.
토막
그럴듯 하긴 한데 왜 하필 0일까
뭐 전역변수가 자동으로 0이 되는거랑 비슷한 거겠군
ㅋ ㅑ.. 궁금했긴했는데 몰라서 그냥 넘어갔었던건데.. 잘 배우고 갑니다.