bin 종류
사용이 끝난 청크들이 저장되는 객체로 메모리 낭비를 막고 해제된 청크를 빠르게 재사용할 수 있도록 해줌
ptmalloc 기준으로 총 128개가 정의되어 있음
smallbin(62개) - 32 바이트 이상 1024 바이트 미만의 크기를 갖는 청크들이 보관됨. 하나의 smallbin에는 같은 크기의 청크들만 보관되며 bin의 인덱스가 증가할 수록 16바이트씩 커짐
fastbin (10개) - 32 바이트 이상 176 바이트 이하 크기를 갖는 청크들이 보관됨. 16 바이트 단위로 총 10개의 fastbin이 존재하며 리눅스 기준으로 이 중에서 작은 크기부터 7개의 fastbin만 사용하여 결과적으로 32 바이트 이상 128 바이트 이하 청크들이 fastbin에 저장됨
largebin(63개) - 1024 바이트 이상 크기를 갖는 청크들이 보관됨. 일정 범위 안의 크기를 갖는 청크들이 모두 보관되며 bin의 인덱스가 증가할 수록 로그적으로 증가함
unsortedbin(1개) - 분류되지 않은 청크들을 보관하며 fastbin에 들어가지 않은 모든 청크들은 해제되었을 때 크기 구분 없이 unsortedbin에 보관됨
나머지 2개는 사용되지 않음
청크 할당 요청 시 bin 탐색 순서(ptmalloc)
smallbin 크기에 해당하는 청크 할당 요청
fasbin/smallbin - unsortedbin
largebin 크기에 해당하는 청크 할당 요청
unsortedbin - 크기에 따라 적절한 bin에 분류
largebin 크기에 해당하는 청크 할당 요청 시 연속적으로 청크를 해제하면서 병합하고 재분류하는 과정이 반복적으로 발생하는데 이러한 과정에서 생기는 비용을 줄이기 위해 unsortedbin을 먼저 탐색하여 비용을 절감함
'Heap' 카테고리의 다른 글
Heap 기초(3) - ptmalloc의 bin_2 (arena, tcache) (0) | 2022.10.24 |
---|---|
Heap 기초(1) - 메모리 단편화 종류 / ptmalloc 객체 (0) | 2022.10.21 |