이 포스트를 만든 목적
- 이 포스트는 "Modern C++ Design Chapter 4"를 읽고, 내가 생각한 것과 정리한 것을 기록하기 위한 목적으로 만들었다.
이 포스트의 준비물
- FireFox 3.6.10
우선 미리 큰 메모리를 할당/해제 하는 기능을 생각해 보자.
미리 큰 메모리를 할당하는 방법은, 큰 메모리에서 작은 메모리로 쪼개는 방법에 따라서 할당 방법이 달라질 것이므로, 쪼개는 방법을 생각해 보면, 다음과 같을 것이다.
- 미리 큰 메모리 하나를 할당하고, 이것을 원하는 크기로 쪼개 사용하는 방법
- 단점 : 랜덤하게 쪼갬으로써 할당/해제 로직이 무척 복잡해 진다.
- 장점 : 미리 할당한 큰 메모리 사용률이 무척 높다.
- 미리 큰 메모리 여러개를 할당하고, 이 메모리들을 각각 고정 크기로 쪼개서 사용하는 방법
- 단점 : 미리 할당한 큰 메모리 사용률이 높지 않아, 메모리 사용량이 높아진다.
- 장점 : 고정 블럭 단위이므로, 할당/해제 작업이 보다 쉽다.
구현이 쉬운 방법이 작업하기 편하고, 가독성도 좋으므로, B를 선택한다.(실제로 B 방법으로 많이 개발하는 것 같다. 책도 B 방법으로 구현되어 있다.)
맛보기 코드
맛보기 코드 부가 설명
Chunk의 내부 블럭은 최대 unsigned char(-1)개 만큼 유지 하도록 제한했는데, 이는 다음의 이유 때문이다.:
- 메모리 사용량을 줄이기 위해 포인트를 이용한 링크드 리스트가 아닌, 인덱스를 이용한 단방향 링크드 리스트이기 때문에 이것은 객체의 최소 크기가 1 Byte 이기 때문에, 인덱스의 크기가 1 Byte를 넘을수 없다.
- 책에선 메모리 정렬 문제가 있다고 지적하지만, 이해가 되지 않는 부분이 있어, 저자에게 물어보려고 했으나, 저자와 연락이 닿지 않는다. 출판사에 연락했으나, 저자와 연락이 안된다고 한다. ;(
Chunk::delloc 은 모든 에러를 잡아주지 않는다. 결국 사용법 규격화가 필요하다.
부족한 점
- Chunk 만으로 메모리 할당을 사용하기 힘든 면(메모리 할당 해제에 수작업이 더 많아졌다.)이 있고, 여러개의 여러개의 Chunk가 필요한 경우 더 복잡해 지므로, Chunk 를 그룹화 하고, 관리하는 기능이 필요하다.
여담
- 5부에서는 이러한 Chunk를 그룹화, 관리 기능을 구현해 본다.
'책 정리 > Modern C++ Design' 카테고리의 다른 글
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장, 작은 객체에 대한 메모리 할당 : 4 - 메모리 풀에서 할당 기능을 어떻게 만들 것인가? (1) | 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 |
Part 3, 테크닉 3-12 부분적으로 정렬된 Typelist 2부 (360) | 2010.03.13 |
최근댓글