Daily Heap #2

juuun0·2022년 1월 8일
1

Heap-A-to-Z

목록 보기
2/10
post-thumbnail

Function

Heap memory는 memory allocater에 의해 관리됩니다. 따라서 heap 공간을 사용하기 위해서는 함수를 호출하여 확보할 수 있습니다. C 언어의 경우 <stdlib.h>에 선언되어 있으며 가장 대표적인 malloc() 함수와 free() 함수가 있습니다.

malloc()

malloc() 함수를 사용하여 새로운 heap 공간을 생성할 수 있습니다. 함수의 return value는 heap이 생성된 memory 주소를 void * 형태로 반환합니다. 비슷한 역할의 함수로 calloc() 함수가 존재합니다. 두 함수의 차이점은 공간을 할당할 때 User Data 영역에 대한 초기화 여부가 있습니다. 더 자세한 내용은 heap exploit 관련 게시글에서 기술할 예정입니다.

free()

argument로 heap pointer를 사용하며 할당한 공간에 대한 해제를 진행합니다. 프로그램 작성 시 적절한 free를 진행하지 않을 경우 성능 상의 오류나 취약한 부분이 발생할 수 있습니다.


First Call

Heap memory는 프로그램의 필수 요소가 아닌 만큼 경우에 따라 heap 영역이 존재하지 않을 수도 있습니다.

이로 인해 처음 heap 공간을 요청할 때 이를 확보하기 위한 초기화 과정이 진행됩니다. ptmalloc2의 경우 multi thread를 지원하기 때문에 조건에 따라 다른 초기화 과정을 실행합니다.

여러 thread가 하나의 heap segment를 공유할 경우 deadlock이 발생할 수 있기 때문에 서로 다른 공간을 사용하게 되는데 이 공간의 단위를 Arena 라고 합니다.

profile
To be

2개의 댓글

comment-user-thumbnail
2022년 3월 16일

(ว˙∇˙)ง

1개의 답글