본문 바로가기

힙 할당 메커니즘 (기초) 힙 할당 메커니즘 모든 힙 블럭에는 힙 정보를 포함하는 힙 메타데이터 8bytes를 포함한다.따라서 8bytes를 요청하였을 경우 +8된 16bytes의 힙 청크가 있는 지 찾는다. 프론트엔드 할당자도 백엔드의 프리리스트도 블럭 크리별로 나뉘어져 각각이 링크드 리스트로 관리된다.그런데, 힙 요청은 8bytes 단위로 요청하나 힙 블럭에는 항상 힙 메타데이터가 포함되므로 8bytes는 요청할 수 없다. ==> 따라서 프리리스트의 [0]번째 인덱스는 사용되지 않거나 특수 목적으로 사용된다.- 프론트엔드 할당자는 [0]인덱스를 사용하지 않음.- 백엔드 할당자는 [0]인덱스에 [127]번째 블럭 크기보다 크면서 Virtual Alloc을 해야할 정도로는 크지 않는 힙들을 전부 담는다. [할당 작업 순서]1) 프..
실질적으로 할당된 힙 크기 구하기 동적으로 할당되는 힙(heap)의 정확한 크기 구하기. 할당받는 힙의 크기는 요청한 크기와 정확하게 일치할 때도 있지만 조금의 차이가 있을 수도 있다.요청한 Size와 동일한 크기의 Chunk가 존재한다면 딱 맞게 주겠지만, 아니라면 조금 더 큰 Chunk에서 잘라내어 할당하기도 한다. Chunk의 크기는 8bytes의 배수이기 때문이다. 따라서 요청한 Heap 크기보다 조금 더 크게 할당 될 수도 있다.(=-> 때문에, Bins로 관리 시 Size의 나머지 3bit를 | N | M | P |의 Flags로 사용함.) 코딩 시 할당된, 사용 가능한 힙 크기를 정확하게 알아야할 때가 있는데 함수를 통해 구하는 법을 알아보자. 윈도우즈 플랫폼 같은 경우는_msize(힙주소) 리눅스와 유닉스의 경우에는mall..
힙(Heap) 구조 - Linux [구조] - (line당 4bytes단위)(Header)━━━━━━━━━━━━━━━━━━━━━━━━━ (malloc chunk)Prev_Size━━━━━━━━━━━━━━━━━━━━ (actual chunk)Size | N | M | P | -- 힙 크기가 8bytes 단위이므로, 뒤의 3bit는 "Flags"로 사용된다.-----------------------(Data)FDBKFD_nextsize ┐BK_nextsize ┘ LargeBin에서만 사용됨. 크기가 다른 첫번째 Chunk를 가리킴.[Chunk data....][Chunk data....][Chunk data....]━━━━━━━━━━━━━━━━━━━━━━━━━Prev_Size -- 인접한 다음 Chunk의 Prev_Size도 현재 Chunk..