2013-03-18 17 views
9

calloc()malloc에 이어 memset에 이어 지는지 궁금합니다. 후자는 메모리를 할당하고 초기화하는 가장 일반적인 방법 인 것으로 보입니다.malloc() 및 memset() 대신 calloc()을 사용하면 어떤 이점이 있습니까?

github code search은 많은 테스트와 구현을 나타내지 만 첫 번째 페이지에는 실제로 calloc을 사용하는 코드가 없습니다.

calloc을 사용하거나 권장하는 프로젝트/조직을 알고있는 사람과 권장하는 환경이 있습니까?

코멘트 아래 답변에서

, 여기에 몇 가지 지금까지 가지고있는 생각 나타난다입니다 :

  • calloc(n, size)malloc(n * size)

  • 의 mallocmemset 함수를 결합 가능합니다 오버 플로우를 방지 할 수calloc에게 이미 제로 된 것으로 알려진 페이지를 요청할 기회를줍니다.

  • 단점

    결합 단계 의 malloc 주위 다른 랩퍼를 배제 할 수있다은 calloc한다.

+2

아무도 그것을 사용하지 못했고, 그것의 존재를 알고 있음에도 불구하고 그것을 사용하지 못했습니다. 왜 그런지는 모르겠지만 C처럼 느껴지지 않습니다. – Dave

+5

'malloc()'과'memset()'이 사실상'calloc()'보다 느릴 수 있습니다. –

+0

GitHub에서'malloc'을 검색하면 사용법을 찾기 전에 구현과 테스트 코드를 찾을 수 있습니다. –

답변

14

글쎄, 나는 C 코드의 꽤에서 calloc를 사용, 그래서 나는 그 대답 같아요. 약간 특이한 호출 메소드 (요소의 수와 요소의 크기)가 사람들을 던질 수 있다고 생각합니다. 그러나 예상대로 많은 호출을 볼 수없는 또 다른 이유 중 하나는 많은 대규모 프로젝트가 malloc, calloc 및 메모리 할당 오류시 오류 처리 (일반적으로 프로그램 종료)하는 래퍼를 사용한다는 것입니다. 따라서 실제 코드는 xcalloc을 대신 사용합니다. 사용

이유 중 하나는 callocmalloc을 통해 플러스 memsetcalloc보다 효율적으로 할 수 있다는 것이다. C 라이브러리가 이미 페이지가 제로화되었다는 것을 이미 알고 있다면 (아마도 OS로부터 새로운 제로화 된 메모리를 얻었을 것입니다), 명시 적으로 제로화 할 필요는 없습니다.

관련 문제