Daily Heap #3

juuun0·2022년 1월 10일
1

Heap-A-to-Z

목록 보기
3/10
post-thumbnail

Arena

Arena는 다시 두 개의 종류로 분류할 수 있습니다. Main thread가 가지는 arena는 "main arena" 라고 하며, main thread에 의해 생성된 sub thread는 "thread arena"를 가지게 됩니다.

위 개념에 따르면 thread - arena 간의 1:1 mapping이 가능하지만 실제로는 비용과 사용성 측면에서 코어 수에 비례하여 최대 arena 개수가 제한됩니다. 각 architecture에서 최대 arena의 수는 아래와 같습니다.

32bit 환경의 경우 long size가 4 byte이기 때문에 4 * Number of cores
64bit 환경의 경우 long size가 8 byte이기 때문에 8 * Number of cores

Main Arena

Main arena는 main thread가 관리하는 arena로 단일 thread 환경일 경우 main arena만 사용됩니다. 이는 별도로 heap을 생성하지 않아도 기본적으로 선언되어 있습니다.

Main arena의 경우 오직 하나의 heap segment를 가지게 되며 이로 인해 나중에 기술할 heap_info 구조체를 가지지 않습니다.

Sub Arena

Sub Arena는 main thread가 아닌 thread에서 생성된 heap arena로 프로그램 동작 중 필요에 따라 mmap() 함수를 통해 생성합니다. Main arena와 가장 큰 차이점으로는 Sub heap을 생성할 수 있기 때문에 heap_info 구조체를 가질 수 있습니다.


Reference

profile
To be

0개의 댓글