이 포스트를 만든 목적
- "Modern C++ Design Chapter 4. 를 정리하기 위해
이 포스트의 준비물
- Firefox 3.6.8
참조 서적
- Modern Design C++
내용
1. 어떻게 메모리 풀을 만들어야 하는가?
이 질문에 답하기 위해선, 메모리 할당 작업이 왜 느린지 답해야 할 것이다.
2. 왜 기본 메모리 할당기는 느린가?
기본적은 new 나 malloc 은 OS에게 "나에게 메모리 블럭 좀 줘" 라고 요청을 한다. 이 요청 시간은 큰 블럭이건, 작은 블럭이건 똑같은 시간을 사용한다. 더군다나 OS는 어떠한 할당 요청이 들어 온다 하더라도 동일하게 하드웨어(가상이든 아니든)영역에 구역을 잡아야 하는 일까지 해야 한다.
그래서 기본 메모리 할당은 느리다.
3. 어떻게 메모리 할당 비용을 싸게 할 수 있을까?
고정된 메모리 할당 비용을 지불하므로, 미리 큰 메모리를 할당해두고, 그 메모리 내에서만 사용하면, 할당/해제 작업의 비용을 없앨 수 있다. 그렇다 이게 바로 풀(저수지)이다. 그러므로 이제부터, "어떻게 메모리 풀을 만들어야 하는가?" 에 대한 답을 찾아 볼 수 있을 것이다.
1. 다시 생각해서, 어떻게 메모리 풀을 만들어야 하는가?
- 미리 큰 메모리를 할당/해제 하는 기능
- 미리 할당한 큰 메모리에서 원하는 크기 만큼 할당/해제 하는 기능
- 여기까지 기본적인 Chunk의 기능들이다.
- 큰 메모리가 더 필요할 수 있으므로, 이러한 큰 메모리를 관리(복수 운용)하는 기능
- 이것은 Chunk 를 관리하는 기능이다.
여기서 각 기능들 구현은 어렵지 않다. 어려운건 각 기능들을 서로 조합하고 분해하여 인터페이스를 만들고 관리하는 방법이다. 그러므로, 상대적으로 쉬운것 부터 생각해 보자.
-
메모리 풀을 만들 때, 메모리 풀 사용 정책에 따라, 개발이 다르므로, 여기서 설명하고 하는 형태가 사용 정책에 알맞는 메모리 풀이 아닐 수 있다.
나는 이것을 알고, 정리해야 할 것이다.
- 나머지는 3부에서 정리 하겠다.
'책 정리 > Modern C++ Design' 카테고리의 다른 글
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장, 작은 객체에 대한 메모리 할당 - 3 : 메모리 풀에서 할당 기능을 어떻게 만들 것인가? (0) | 2010.09.25 |
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 |
Part 3, 테크닉 3-12 부분적으로 정렬된 Typelist 1부 (360) | 2010.03.08 |
최근댓글