Heap

Heap 기초(1) - 메모리 단편화 종류 / ptmalloc 객체

LikeMermaid 2022. 10. 21. 01:23
728x90

메모리 단편화(Memory Fragmentation) 종류

내부 단편화(Internal Fragmentation) : 할당한 메모리 공간의 크기에 비해 실제 데이터가 점유하는 공간이 적을 때 발생함

EX)택배 박스는 크지만 내용물이 작아 빈 공간이 많이 생김

 

외부 단편화(External Fragmentation) : 할당한 메모리 공간들 사이에 공간이 많아서 발생하는 비효율

EX) 택배 박스 안에 내용물들이 있지만 내용물들간의 사이에 공간이 많음


ptmalloc 객체

prev_size (8bytes) : 인접한 직전 청크의 크기로 청크를 병합할 때 직전 청크를 찾는 데 사용됨

 

size (8bytes) : 현재 청크의 크기를 뜻하며 헤더의 크기도 포함됨. 64bit 환경에서 사용 중인 청크 헤더의 크기는 16bytes로 사용자가 할당 요청한 크기 + 16bytes(헤더)

EX) 40bytes 할당 요청 -> 48bytes(16bytes 단위로 할당) + 16bytes(헤더 크기) = 64 size

 

flags (3bits) : size의 하위 4bits는 의미를 갖지 않아 그 중 3bits를 청크 관리에 필요한 플래그 값으로 사용함

A main arena에 속해있는지에 대한 여부
M mmap된 청크인지의 여부
P 이전 청크의 free 여부

 

fd (8bytes) : 연결 리스트에서 다음 청크를 가르킴 (freed 청크에만 존재함)

 

bk (8bytes) : 연결 리스트에서 이전 청크를 가르킴 (freed 청크에만 존재함)