이 포스트를 만든 목적

  • 정리 해보려고

이 포스트의 준비물

  • Firefox 3.6.10

참고 서적

  • Modern C++ Design 중 Chapter 4.5 부분

내용

3부에서는 Chunk 를 만들어 보았다면, 4부에서는 Chunk를 그룹화 하여 사용 하는 방법에 대해서 다룬다.

맛보기 코드


chunkgroup.hpp 부가 설명

1. 우선 Chunk::is_useable 과 Chunk::is_has 멤버 함수를 추가 했다. 추가 이유는 다음과 같다.

  • 해당 Chunk가 사용 가능한지 판별하기 위해
    - 사용할 수 없을 경우, 새로운 청크를 만들어야 하기 때문이다.

  • 해당 Chunk가 특정 메모리를 보유하고 있는지 판변하기 위해
    - 메모리를 해제해야 할 경우, 가지고 있어야만, 정상 해제할 수 있기 때문이다.

2. ChunkGroup 의 내부에서 Chunk들은 vecter<Chunk *> 로 가지고 있다. 이유는 다음과 같다.

  • Chunk *인 이유는 vector의 사이즈가 변할 때, Chunk 의 내부가 변할 수 있기 때문이다.(복사 --> 소멸)
  • 어차피 순차로 접근할 수 밖에 없는 상황이므로, 자료구조는 vecter 가 좋기 때문이다.
    순차접근이 아닐 경우, 다른 자료구조를 쓰면 퍼포먼스를 올릴 수 있으나, 메모리 사용량을 감수해야 한다.

3. Chunk 자체는 자신의 크기를 모르고 ChunkGroup이 Chunk 에게 블럭크기, 갯수를 알려 준다.

  • 이 메모리 풀은 작은 객체를 위한 메모리 할당기이므로 메모리 사용량을 줄이는게 목표에 있다.

4. Chunk *ChunkGroup::pcurrent_chunk_ 는 캐쉬 기능 역활을 한다.

  • 할당 및 해제 작업할 때, 해당 Chunk의 포인터를 저장해 두었다가, 찾지 않고 바로 사용한다.
    - 삭제와 할당이 다른 Chunk 에서 비번이 발생 할 경우, 캐쉬 기능을 원할이 수행하지 못한다. ;(

chunkgroup.hpp 문제점

  • Chunk 의 갯수를 늘리기만 할 뿐, 줄이는 기능은 없다.
    - 일정 크기에서 멈추겠지만, 최악의 경우, 메모리 고갈 상태가 올 수도 있다. ;(

  • 아직까지 사용이 불편하다.
    - 예를 들어, 객체 크기 3, 4, 5, 6, 7, 8 이 있을 경우, 각각 관리하는 방법이 수작업 밖에 없다.

여담

  • 여러 객체 크기에 따른 관리는 다음에 5부에서 다루겠다.

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기