[완료] 커널API 중 kcalloc 과 kzalloc 의 차이가 뭔가요..?
글쓴이: maze / 작성시간: 토, 2011/01/15 - 11:52오전
kcalloc — allocate memory for an array. The memory is set to zero.
oid * kcalloc ( size_t n,
size_t size,
gfp_t flags);
kzalloc — allocate memory. The memory is set to zero.
void * kzalloc ( size_t size,
gfp_t flags);
설명은 위와같이 되어있습니다..
0으로 초기화 해주는건 같은데, 왜 저렇게 나누어 놓은건가요..?
잘 이해가 안갑니다... 답변좀 해주세요..ㅠ_ㅠ
Forums:
http://lwn.net/Articles/14701
http://lwn.net/Articles/147014/
이 링크가 도움이 되실 듯 하네요.
위 링크는 너무 쓸떼없이 말만 길게 늘어놓았군요
위 링크는 너무 쓸떼없이 말만 길게 늘어놓았군요
코드로 답변드릴게요
static inline void *kcalloc(size_t n, size_t size, gfp_t flags)
{
if (size != 0 && n > ULONG_MAX / size)
return NULL;
return __kmalloc(n * size, flags | __GFP_ZERO);
}
static inline void *kzalloc(size_t size, gfp_t flags)
{
return kmalloc(size, flags | __GFP_ZERO);
}
즉
즉 위의 코드를 보자면
kcalloc 은 배열을 할당하는 구문으로 배열 array[5][6] 을 할당한다면
kcalloc(5, 6, GFP_KERNEL) 이 되겠네요
할당되는 크기는 5x6 = 30 이 될테고.
다만 두번쨰 인자 6은 0이면 안되고
할당되는 크기 (1번째 인자 X 2번째 인자) 의 크기가 unsigned long 의 크기를 넘어서면
메모리 할당이 실패하는 예외처리만 추가적으로 있는것 뿐이네요.
즉, 단순한 예외처리가 있는 배열메모리할당(동적인 할당) 함수가 kcalloc 인거죠
댓글 달기