[0702 발표] 푸터 생략하고 4바이트 아끼기

방법이있지·2025년 7월 2일

[정글 4-8주차] C언어

목록 보기
25/26
post-thumbnail

전체 구현 코드 링크

오늘은 할당된 블록에서 푸터를 생략하여 메모리를 절약할 수 있는 방법을 공유해 보겠습니다.

할당된 블록엔 푸터가 필요 없음

블록을 반환한 후 병합할 때는, 이전 블록의 푸터를 확인해 할당 상태인지 가용 상태인지를 확인하게 됩니다. 이때 이전 블록이 가용 상태라면 합칠 수 있겠죠. 이때 푸터에 저장된 크기를 사용해, 병합된 블록의 전체 크기를 계산합니다.

그런데 이전 블록이 할당된 상태라면 병합이 불가능하므로, 크기를 계산할 일이 없습니다. 즉 이전 블록의 크기를 알 필요가 없으니, 푸터를 생략해도 됩니다. 다만 푸터에는 이전 블록의 할당 여부도 저장되어 있으니, 이를 다른 방식으로 확인할 수 있어야 합니다.

직전 블록의 할당 여부 확인

이를 위해, 블록의 헤더에 ‘이전 블록의 할당 여부’를 표시하는 비트를 하나 추가합니다. 이전 블록이 할당 블록이면 1, 가용 블록이면 0으로 설정합니다.

이제 푸터가 차지하던 공간도 실제 메모리 저장에 활용할 수 있습니다. 푸터가 4바이트라고 가정할 때, 할당 가능 공간이 4바이트 늘어나 보다 효율적인 메모리 사용이 가능해집니다.

코드에서 달라지는 점

마지막으로 코드상 달라지는 점을 짧게 훑어보겠습니다. 우선, 이전 블록의 할당 여부를 저장한 비트에 접근할 수 있도록 매크로 함수를 새롭게 정의해 사용합니다. 이를 통해, 병합 과정에서 이전 블록의 할당 여부를 확인하게 됩니다.

또한 블록이 할당되거나 반환될 때마다, 다음 블록의 헤더에 저장된 비트도 함께 갱신해야 하므로, 구현이 보다 복잡해지게 됩니다.

하지만 소중한 4바이트를 아낄 수 있다면, 이 정도 불편함은 감수할 수 있다고 생각합니다. 감사합니다.

profile
뭔가 만드는 걸 좋아하는 개발자 지망생입니다. 프로야구단 LG 트윈스를 응원하고 있습니다.

3개의 댓글

comment-user-thumbnail
2025년 7월 2일

네?

1개의 답글
comment-user-thumbnail
2025년 7월 2일

유익하다...🌲

답글 달기