[C언어] 묵시적(Implicit) vs 명시적(explicit)

현집·2023년 4월 12일
1

C언어로 구현하기

목록 보기
3/4
post-thumbnail

할당기(allocator)에는 두가지 종류가 있다.

  • Implicit allocator(묵시적 할당기)
    - garbage collector
  • Explicit allocator(명시적 할당기)
    - malloc(), free() -> C
    - new(), delete() -> C++

Explicit allocator 구현 방법에는 여러 종류가 있다.

  • Implicit free list (묵시적 가용 리스트)
  • Explicit free list (명시적 가용 리스트)
  • Segregated fit (가용 연결 리스트)
  • buddy system

맨처음 implicit를 구현하라고 했을 때 엥? c에 가비지 컬렉터가 있다고? 엥??? 나한테 그걸 만들라고???? 이 생각이 들었다.

개념을 탄탄히 하지 않으니 이런 바보 같은 소리나 하고 있다...
나같은 사람은 없길 바라며...

할당기를 나누는 묵시, 명시의 기준은 "우리가 직접 메모리 할당, 해제를 해줘야 하냐 마냐"이다.
묵시적 할당에서의 묵시는 컴퓨터가 자기 알아서 척척 해내는 거고,
명시적 할당에서의 명시는 우리가 직접 명시적으로, malloc(20)! 이렇게 해주는 것이다.

그렇다면 명시적 할당기에서 list를 묵시, 명시로 나누는 기준은 무엇일까?
할당 요청이 들어왔을 때 "할당 여부가 미리 명시되어 있느냐 마느냐"라고 생각했다.
이게 무슨 소리냐고? 20만큼 할당을 요구하는 요청이 들어왔다고 예를 들어보겠다.
implicit free list는 블록들에게 똑똑~ 너는 가용블럭이니? 이렇게 물어봐야지 (header나 footer를 방문해서) 가용여부를 알 수 있다. 난 가용여부가 명시되지 않았다고 이해했다.
하지만 explicit free list는 애초에 가용가능한 블록들을 list에 담아두고 거기서 사이즈에 맞는 것을 찾아내기 때문에 가용여부가 명시되어 있다고 이해했다.

말로 설명할 때보다 글로 쓰니 더 어려워 지는 기분... 이해가 되지 않는다면... 내가 설명하는 능력이 부족한 탓이다...

결론은 우리는 명시적 할당기를 명시적 가용 리스트, 묵시적 가용리스트로 구현해 내야한다는 것이다.

다음 게시글부터는 malloc을 상세히 설명하니 정신줄을 꽉잡아야한다. (독자 말고... 글을 적는 내가... 꽉 잡아야한다...)

0개의 댓글