티스토리 뷰

반응형

이 포스트에서는 malloc.c에서 사용되어지는 대표적인 구조체들을 알아보고,

malloc(), free()함수에서 사용되는, 여러가지 정보를 포스팅할 것이다.

 

malloc_state 구조체

주요 항목들

  • fastbinsY[NFASTBINS] → 해당 Arena에서 fastbin의 시작 포인터들로 이루어진 배열.
                                     배열의 각 인덱스가 byte별 fastbin의 시작 포인터가 된다.
  • top → Top Chunk의 주소가 들어있는 포인터 변수.
  • last_remainder → bin에 들어있는 chunk를 분할하여 할당해주고 남은 chunk의 주소가 들어있는 포인터 변수.
  • bins[NBINS * 2 - 2] → unsorted bin, small bin, large bin의 시작 포인터로 이루어진 배열.
                                  0~63 인덱스에 따라서 어떤 bin의 시작 포인터인지 구분된다.
  • *next → Thread가 여러개일 경우 Arena가 여러개가 생길 수 있는데, 그 때 Arena끼리 linked list를 구성하게
    된다. 그 때 사용되는 포인터 변수.

 

============================================================================

[TIP]

  • 기본적으로 Thread마다 하나의 Heap Arena를 가지고, Main Thread가 가지는 Arena는 특별히 main_arena라고 함.
  • 그러나 Thread와 Heap Arena가 항상 1대1로 매칭되는 것은 아니다.
  • Thread가 많아진다면, 1개의 Arena를 여러개의 Thread가 공유할 수도 있다.
      (그래서 heap_info 구조체에 mutex 멤버 변수를 가지고 있다.)

 

[TIP]

  • 항상 모든 bin들은 가장 왼쪽에 새로운 chunk를 추가한다.
  • 하지만 chunk를 할당할 때는 다르다. fastbin은 가장 왼쪽의 chunk를 우선 할당하고 (LIFO)
    나머지 bin들은 가장 오른쪽의 chunk를 우선 할당한다 (FIFO)

 

[TIP]

  • bin 포인터가 자기자신을 가리키고 있다는 것은, 해당 빈이 비어있다는 뜻이다
  • malloc()함수 최초 호출시 malloc_init_state()함수를 통해 bin을 초기화하는데, 그 때 자기자신을 가리키게 한다.

============================================================================

 

 

메모리상의 구조

 

 

heap_info 구조체

주요 항목들

  • ar_ptr → 위 사진과 같이 해당 arena의 주소를 담고 있다.
  • 이 구조체는 main_arena에는 존재하지 않는다.
반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함