2010. 9. 25. 14:42 책 정리/Modern C++ Design

이 포스트를 만든 목적

  • 이 포스트는 "Modern C++ Design Chapter 4"를 읽고, 내가 생각한 것과 정리한 것을 기록하기 위한 목적으로 만들었다.

이 포스트의 준비물

  • FireFox 3.6.10

우선 미리 큰 메모리를 할당/해제 하는 기능을 생각해 보자.

미리 큰 메모리를 할당하는 방법은, 큰 메모리에서 작은 메모리로 쪼개는 방법에 따라서 할당 방법이 달라질 것이므로, 쪼개는 방법을 생각해 보면, 다음과 같을 것이다.

  1. 미리 큰 메모리 하나를 할당하고, 이것을 원하는 크기로 쪼개 사용하는 방법
    - 단점 : 랜덤하게 쪼갬으로써 할당/해제 로직이 무척 복잡해 진다.
    - 장점 : 미리 할당한 큰 메모리 사용률이 무척 높다.

  2. 미리 큰 메모리 여러개를 할당하고, 이 메모리들을 각각 고정 크기로 쪼개서 사용하는 방법
    - 단점 : 미리 할당한 큰 메모리 사용률이 높지 않아, 메모리 사용량이 높아진다.
    - 장점 : 고정 블럭 단위이므로, 할당/해제 작업이 보다 쉽다.

구현이 쉬운 방법이 작업하기 편하고, 가독성도 좋으므로, B를 선택한다.(실제로 B 방법으로 많이 개발하는 것 같다. 책도 B 방법으로 구현되어 있다.)

맛보기 코드

맛보기 코드 부가 설명

Chunk의 내부 블럭은 최대 unsigned char(-1)개 만큼 유지 하도록 제한했는데, 이는 다음의 이유 때문이다.:

  • 메모리 사용량을 줄이기 위해 포인트를 이용한 링크드 리스트가 아닌, 인덱스를 이용한 단방향 링크드 리스트이기 때문에 이것은 객체의 최소 크기가 1 Byte 이기 때문에, 인덱스의 크기가 1 Byte를 넘을수 없다.

  • 책에선 메모리 정렬 문제가 있다고 지적하지만, 이해가 되지 않는 부분이 있어, 저자에게 물어보려고 했으나, 저자와 연락이 닿지 않는다. 출판사에 연락했으나, 저자와 연락이 안된다고 한다. ;(

Chunk::delloc 은 모든 에러를 잡아주지 않는다. 결국 사용법 규격화가 필요하다.

부족한 점

  • Chunk 만으로 메모리 할당을 사용하기 힘든 면(메모리 할당 해제에 수작업이 더 많아졌다.)이 있고, 여러개의 여러개의 Chunk가 필요한 경우 더 복잡해 지므로, Chunk 를 그룹화 하고, 관리하는 기능이 필요하다. 

여담

  • 5부에서는 이러한 Chunk를 그룹화, 관리 기능을 구현해 본다.


posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요