반응형
Arena.
Arena는 malloc()에서 메모리 영역과 메모리 관리 부분을 칭한다.
즉 프로세스에 할당된 heap 영역(즉------non mmapped).
Main_arena는 malloc.c에서 "struct malloc_state"이라는 구조체를 사용하는 변수다.
힙 메모리의 인접한 지역을 arena라고 부른다. 이 arena는 메인 스레드로써 생성되었기 때문에, 이것을 main arena라고 부른다.
이후, 할당 요청은 이 arena를 사용하여 비어있는 공간이 없어질 때 까지 유지하면서 사용한다. arena의 비어있는 공간이 고갈되었을 경우,
프로그램의 break 위치를 증가시킴으로써 더욱 성장할 수 있다 (top 청크의 크기를 증가시켜 여분의 공간을 포함할 수 있도록 조정한 후).
이와 비슷하게 top 청크에 비어있는 공간이 많은 경우, arena는 또한 줄어들 수도 있다.
cf)
사용자는 1000바이트만 요청했지만, 1MB 크기의 힙 메모리가 프로세스 주소 공간에 매핑되어 있다. 이 1MB 중, 132KB가 read-write 권한이 세트되어, 이 스레드를 위해 힙 메모리로 할당되었다. 이러한 메모리의 일부분(132KB을 thread arena라고 부른다.
Ex)
malloc_state 구조체의 형태는 해당 구조체를 이용해 Arena의 세부 정보를 보관한다.
또한 할당된 chunk들을 관리한다.
Ex)
위 코드는 Gdb에서 확인 할 수 있다.
반응형
'#Tip' 카테고리의 다른 글
Bin. (0) | 2018.04.07 |
---|---|
Chunk. (0) | 2018.04.07 |
Process & Thread. (0) | 2018.04.07 |
The heap 2. (0) | 2018.04.07 |
The heap. (0) | 2018.04.07 |