이 포스트를 만든 목적
- 정리 해보려고
이 포스트의 준비물
- 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부에서 다루겠다.
'책 정리 > Modern C++ Design' 카테고리의 다른 글
5장, 일반화 함수자(함수 객체) - 3, C++의 호출 가능한 객체들 (0) | 2010.10.09 |
---|---|
5장, 일반화 함수자(함수 객체)와 Command 패턴 : 2 - Command 패턴은 무엇인가? (0) | 2010.09.29 |
5장, 일반화 함수자(함수 객체)와 Command 패턴 : 1 - 일반화 함수자는 무엇인가? (0) | 2010.09.29 |
4장, 작은 객체에 대한 메모리 할당 : 6 - 더 이야기 하고 싶은 메모리 풀 (1) | 2010.09.26 |
4장, 작은 객체에 대한 메모리 할당 : 5 - 메모리 풀에서 할당 기능을 어떻게 만들 것인가? (0) | 2010.09.25 |
4장, 작은 객체에 대한 메모리 할당 - 3 : 메모리 풀에서 할당 기능을 어떻게 만들 것인가? (0) | 2010.09.25 |
4장, 작은 객체에 대한 메모리 할당 - 2 : 어떻게 메모리풀을 만들어야 하는가? (722) | 2010.03.28 |
4장, 작은 객체에 대한 메모리 할당 - 1 : 메모리 풀은 무엇이며, 왜 필요한가? (360) | 2010.03.19 |
Part 3, 테크닉 3-13 Typelist를 통한 클래스 생성, 2부 (360) | 2010.03.18 |
Part 3, 테크닉 3-13 Typelist를 통한 클래스 생성, 1부 (0) | 2010.03.14 |
최근댓글