[CSAPP] Chapter 09.

Y_Y·2023년 5월 15일
0

CSAPP

목록 보기
2/4

9.9 동적 메모리 할당

C프로그래머들은 대개 추가적인 가상메모리를 런타임에 획득할 필요가 있을 때, 동적 메모리 할당기를 사용하는 것을 좀 더 편리하고 호환성이 좋다고 생각한다.

동적 메모리 할당기는 힙 (heap)이라고 하는 프로세스의 가상 메모리 영역을 관리한다.
커널은 힙의 꼭대기를 가리키는 변수 brk(break라고 읽는다)를 사용한다.

할당기는 힙을 다양한 크기의 블록들의 집합으로 관리한다. 각 블록은 할당되었거나 가용한 가상메모리의 연속적인 묶음이다.
할당된 블록은 응용에 의해 명시적으로 또는 메모리 할당기 자신에 의해 묵시적으로 반환될 때까지 할당된 채로 남아 있다.

할당기

  • 명시적 할당기 : 응용이 명시적으로 할당된 블록을 반환해 줄 것을 요구한다.
    ex) C - malloc, malloc 함수를 호출해서 블록을 할당하며, free 함수를 호출해서 블록을 반환한다. C++에서 new, delete 호출과 유사하다.

  • 묵시적 할당기 : 언제 할당된 블록이 더 이상 프로그램에 의해 사용되지 않고 블록을 반환하는지를 할당기가 검출할 수 있을 것을 요구한다. 또한 garbage collector 라고 알려져 있다, 자동으로 사용하지 않은 할당된 블록을 반환시켜주는 작업을 garbage collection이라고 부른다. ex) List, ML, Java같은 상위수준 언어들에서 사용한다.

9.9.1 malloc, free 함수

malloc 함수를 호출해서 힙으로부터 블록들을 할당받는다.

profile
남을 위해(나를 위해) 글을 쓰는 Velog

0개의 댓글