binder에 대한 내용을 공부하다 kzalloc이란 커널 메모리 할당 함수가 있어 찾아 보았다.
kcalloc과 kzalloc 모두 동일하게, 요청한 크기의 메모리를 0으로 초기화하여 반환한다.
그런데 왜 두 개의 함수로 나누어 놓았을까?
그 내용은 위의 kzalloc 링크에 설명되어 있듯이,
처음에는 kmalloc + memset의 기능을 하나로 합쳐 kcalloc으로 만들었다고 한다.
그런데, 사용자들은 보통 kcalloc의 첫 번째 인자인 [size_t n]의 입력을 보통 1로 하여 호출하여, 원래의 기능인 (n * size) 크기의 메모리 할당이 (1 * size) 가되어 별 의미가 없다는 불평(?)이 있었다고 한다. (개인적으로도 헷갈리기만 하고 별 필요 없었다고 생각이 들었다. align을 편하게 하기위해 만든기능?)
그래서 나온 함수가 kzalloc.
위와 같이 kcalloc의 첫 번째 인자가 kzalloc에서는 사라졌다.
kcalloc과 kzalloc 모두 동일하게, 요청한 크기의 메모리를 0으로 초기화하여 반환한다.
그런데 왜 두 개의 함수로 나누어 놓았을까?
그 내용은 위의 kzalloc 링크에 설명되어 있듯이,
처음에는 kmalloc + memset의 기능을 하나로 합쳐 kcalloc으로 만들었다고 한다.
void *kcalloc(size_t n, size_t size, unsigned int __nocast gfp_flags);
그런데, 사용자들은 보통 kcalloc의 첫 번째 인자인 [size_t n]의 입력을 보통 1로 하여 호출하여, 원래의 기능인 (n * size) 크기의 메모리 할당이 (1 * size) 가되어 별 의미가 없다는 불평(?)이 있었다고 한다. (개인적으로도 헷갈리기만 하고 별 필요 없었다고 생각이 들었다. align을 편하게 하기위해 만든기능?)
그래서 나온 함수가 kzalloc.
void *kzalloc(size_t size, unsigned int __nocast gfp_flags);
위와 같이 kcalloc의 첫 번째 인자가 kzalloc에서는 사라졌다.
'리눅스 & 안드로이드' 카테고리의 다른 글
Sys Filesystem (0) | 2011.06.01 |
---|---|
Network File System(NFS) 환경 설정 (0) | 2011.06.01 |
Android VM의 heap 크기 수정 (2) | 2011.05.17 |
ANDROID system image에 blktrace / blkparse 추가 (4) | 2011.05.11 |
Android(or JAVA) 에서 File 쓰기(write)의 문제점 (2) | 2011.04.22 |