2010.03.28 03:15 책 정리/Modern C++ Design

이 포스트를 만든 목적

  • "Modern C++ Design Chapter 4. 를 정리하기 위해

이 포스트의 준비물

  • Firefox 3.6.8

참조 서적

  • Modern Design C++

내용

1. 어떻게 메모리 풀을 만들어야 하는가?

이 질문에 답하기 위해선, 메모리 할당 작업이 왜 느린지 답해야 할 것이다.

2. 왜 기본 메모리 할당기는 느린가?

기본적은 new 나 malloc 은 OS에게 "나에게 메모리 블럭 좀 줘" 라고 요청을 한다. 이 요청 시간은 큰 블럭이건, 작은 블럭이건 똑같은 시간을 사용한다. 더군다나  OS는 어떠한 할당 요청이 들어 온다 하더라도 동일하게 하드웨어(가상이든 아니든)영역에 구역을 잡아야 하는 일까지 해야 한다.

그래서 기본 메모리 할당은 느리다.

3. 어떻게 메모리 할당 비용을 싸게 할 수 있을까?

고정된 메모리 할당 비용을 지불하므로, 미리 큰 메모리를 할당해두고, 그 메모리 내에서만 사용하면, 할당/해제 작업의 비용을 없앨 수 있다. 그렇다 이게 바로 풀(저수지)이다. 그러므로 이제부터, "어떻게 메모리 풀을 만들어야 하는가?" 에 대한 답을 찾아 볼 수 있을 것이다.

1. 다시 생각해서, 어떻게 메모리 풀을 만들어야 하는가?

  1. 미리 큰 메모리를 할당/해제 하는 기능
  2. 미리 할당한 큰 메모리에서 원하는 크기 만큼 할당/해제 하는 기능
    - 여기까지 기본적인 Chunk의 기능들이다.

  3. 큰 메모리가 더 필요할 수 있으므로, 이러한 큰 메모리를 관리(복수 운용)하는 기능
    - 이것은 Chunk 를 관리하는 기능이다.

여기서 각 기능들 구현은 어렵지 않다. 어려운건 각 기능들을 서로 조합하고 분해하여 인터페이스를 만들고 관리하는 방법이다. 그러므로, 상대적으로 쉬운것 부터 생각해 보자.

여담
  • 메모리 풀을 만들 때, 메모리 풀 사용 정책에 따라, 개발이 다르므로, 여기서 설명하고 하는 형태가 사용 정책에 알맞는 메모리 풀이 아닐 수 있다.
    나는 이것을 알고, 정리해야 할 것이다.
  • 나머지는 3부에서 정리 하겠다.


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

댓글을 달아 주세요

  1. chocoholic 2010.04.08 11:12  Addr  Edit/Del  Reply

    3부는 언제쯤 나오시나요 ㅎㅎ 메모리 풀에 대한 확실한 이해가 필요해서요..

  2. Favicon of https://www.ikpil.com 농사를 짓는 게임 프로그래머 최익필 2010.04.08 21:49 신고  Addr  Edit/Del  Reply

    만드는 방법을 설명하는 방법이 좀처럼 쉽게 떠오르지 않네요. :)

  3. 김승동 2010.08.18 21:26  Addr  Edit/Del  Reply

    잘보고 갑니다!ㅋ 전 지금 이규호 팀장님 밑에서 실습생으로 있습니다..^^이규호팀장님이 아는분이라고 얘기하시네요..^^;