malloc 후 free되는데 어느정도의 시간이....
글쓴이: Jeong Kwanhee / 작성시간: 화, 2009/12/29 - 9:32오전
안녕하세요?
malloc에 대한 문의 드립니다.
malloc을 수행하고 free를 수행하는 행위를 반복적으로 하고 있습니다.
free를 통해 메모리를 반납하면 어느 정도의 시간 후, 사용가능해지는지요? 바로 가능해지는건지요??
왜냐하면,,,
보드에서 테스트를 해보고 있는데,
처음 malloc을 했을 때, 주소가 cb702000이고 free를 한 후,
다시 malloc을 했을 때는 주소가 cba02000
그다음 free 후, malloc하면, cbe02000 이렇게 할당이 됩니다.
.
.
.
몇번 하다보니 cbe02000 값까지 되네요...
만약 free로 메모리 해제하는데 시간이 걸린다면, 자주 malloc을 수행하는 경우는 array를 쓰는게 더 효율적인가요?
Forums:
구현 방식에 따라 다르겠지만..
이용 중인 malloc의 구현에 따라 동작이 달라질 수 있겠지만
일반적인 상황이라면 바로 사용 가능해 질 것입니다.
glibc에서 사용하는 ptmalloc2의 경우
memory (chunk)가 free()되면 내부 캐시 내에 포함되어
다음번에 동일한 크기의 요청을 바로 처리하도록 되어 있습니다.
이에 대한 overhead는 (극히) 적다고 볼 수 있습니다.
단 memory chunk의 크기가 일정 크기 이상이라면
free 시에 인접한 (free) chunk와 merge를 시도하기 때문에
약간의 overhead가 더 추가됩니다.
하지만 (아마도) 지금 질문하신 내용은 kernel의 kmalloc/kfree에 대한 것 같은데
kmalloc을 처리하는 slab 할당자의 경우에도
free된 메모리를 (array_cache라는 자료 구조를 통해) 각 cpu별로 캐시해두고
다음번 요청을 바로 처리하도록 되어 있습니다.
일반적으로 동적 메모리를 (매우) 자주 할당/해제한다면
이를 위한 전용 함수를 작성하는 것을 고려해 보는 것이 좋습니다.
(리눅스 커널의 경우에는 kmem_cache_xxx 류의 함수들을 이용할 수 있으니 간단합니다.)
댓글 달기