본문 바로가기

Modern C++ Design

(11)
5장, 일반화 함수자(함수 객체) - 4, 일반화 함수자 구현하기 이 포스트의 목적 일반화 함수자(함수 객체)를 구현하는 방법을 알아 본다. 이 포스트의 준비물 VMware player 3.1.2 Debian 5 64bit g++ 4.3.2 vim 7.1.314 project.vim make 참조 서적 안드레 알렉산드레스쿠 저. Modern C++ Design. 이기형 역. Addiston-Wesley. 인포북. 초판 2003.07.30. page(183 ~ 190) 내용 boost에 있는데, 모하러 구현하냐 싶지만, 구현하는 과정 중에 배움을 얻기 위해서 구현해 보는 것이다. 그러므로 구현해 본다. 기본틀은 어떻게 잡을까? 그냥 함수자의 경우, 기본틀은 다음과 같을 것이다. class Functor { public: void operator()(); }; 1번에서, ..
5장, 일반화 함수자(함수 객체)와 Command 패턴 : 1 - 일반화 함수자는 무엇인가? 이 포스트의 목적 일반화 함수자(함수 객체)를 만들어 보는 것이다. 일반화 함수자(함수 객체)를 이해하는 것 이다. 이 포스트의 준비물 Firefox 4.0 beta6 Winamp v.5.572 (x86) 참조 서적 주 : Modern C++ Design p.175 ~ p.176 부1 : Effective STL p.245~ 부2 : C++ Standard Libaray 튜토리얼 레퍼런스 p.345~ 참조 링크 http://yesarang.tistory.com/57 - 함수 객체 1부 http://yesarang.tistory.com/59 - 함수 객체 2부 http://yesarang.tistory.com/61 - 함수 객체 3부 내용 왜 제목이 일반화 함수자(함수 객체)와 Command 패턴인가 하면..
4장, 작은 객체에 대한 메모리 할당 : 6 - 더 이야기 하고 싶은 메모리 풀 이 포스트를 만든 목적 1부에서 5부까지 나와있는 내용 밖의 이야기들을 정리하려고 이 포스트의 준비물 Firefox 4.0 beta6 - 웹 서핑 속도는 무척 빨라졌다. Winamp v5.572 (x86) 참조 서적 Modern C++ Design 참조 링크 http://www.boost.org/doc/libs/1_44_0/libs/pool/doc/index.html - 부스트 라이브러리 http://loki-lib.sourceforge.net/ - 로키 라이브러리 http://apr.apache.org/ - apr 라이브러리(메모리 풀이 있다.) http://download.dre.vanderbilt.edu/ - ace lib http://javawork.egloos.com/1997714 - 3가지 메..
4장, 작은 객체에 대한 메모리 할당 : 5 - 메모리 풀에서 할당 기능을 어떻게 만들 것인가? 이 포스트를 만든 목적 정리 좀 해보려고 이 포스트의 준비물 Firefox 4.0 beta6 Winamp 5.xx - 노래 들으면서 썻기 때문에 :) 참고 서적 Modern C++ Design Effective C++ 3판 C++ Standard Library 튜토리얼 레퍼런스 프로그래머의 길, 멘토에게 묻다 참조 링크 http://dodoubt.tistory.com/125 - std::lower_bound 를 보기 위해서 http://www.cplusplus.com/reference/stl/multimap/lower_bound/ - 위와 마찬가지 내용 4부까지 ChunkGroup 을 구현하는데 초점을 두었다면, 5부터는 ChunkGroup 을 쉽게 사용하는 방법과 인터페이스에 대한 이야기를 한다. Mo..
4장, 작은 객체에 대한 메모리 할당 : 4 - 메모리 풀에서 할당 기능을 어떻게 만들 것인가? 이 포스트를 만든 목적 정리 해보려고 이 포스트의 준비물 Firefox 3.6.10 참고 서적 Modern C++ Design 중 Chapter 4.5 부분 내용 3부에서는 Chunk 를 만들어 보았다면, 4부에서는 Chunk를 그룹화 하여 사용 하는 방법에 대해서 다룬다. 맛보기 코드 #include #include "chunk.hpp" #include class ChunkGroup { public: ~ChunkGroup() { for (int i = 0; i < chunks_.size(); ++i) { delete chunks_[i]; chunks_[i] = NULL; } chunks_.clear(); } ChunkGroup(std::size_t block_size, unsigned char bloc..
4장, 작은 객체에 대한 메모리 할당 - 3 : 메모리 풀에서 할당 기능을 어떻게 만들 것인가? 이 포스트를 만든 목적 이 포스트는 "Modern C++ Design Chapter 4"를 읽고, 내가 생각한 것과 정리한 것을 기록하기 위한 목적으로 만들었다. 이 포스트의 준비물 FireFox 3.6.10 우선 미리 큰 메모리를 할당/해제 하는 기능을 생각해 보자. 미리 큰 메모리를 할당하는 방법은, 큰 메모리에서 작은 메모리로 쪼개는 방법에 따라서 할당 방법이 달라질 것이므로, 쪼개는 방법을 생각해 보면, 다음과 같을 것이다. 미리 큰 메모리 하나를 할당하고, 이것을 원하는 크기로 쪼개 사용하는 방법 - 단점 : 랜덤하게 쪼갬으로써 할당/해제 로직이 무척 복잡해 진다. - 장점 : 미리 할당한 큰 메모리 사용률이 무척 높다. 미리 큰 메모리 여러개를 할당하고, 이 메모리들을 각각 고정 크기로 쪼개서..
Part 3, 테크닉 3-13 Typelist를 통한 클래스 생성, 2부 Purpose-built post 이 포스트는 "Modern C++ Design Chapter 3.13 Typelist를 통한 클래스 생성" 내용을 읽고 정리할 목적으로 만들어졌다. 2부 내용은 생성 후 각 타입 객체에 접근하는 방법에 대해서 정리한 것이다, Content 현재 나는 책 내용과 다르게 진행하고 있다. 책에선 FieldHelper 를 함수로 구현하여, 원하는 요소에 접근을 한다. 나도 마찬가지로 함수 형태로 구현하려 했지만, 한가지 불편한 것이 있었다. 바로 함수는 템플릿 특수화가 되지 않는 점이였다. 나는 이 방법을 해결하기 위해 몇가지 생각을 했었다. (이것은 직관력으로 바로 생각해 낸 것이 아니라, 일전에 내가 고민하다가, 어떨결에 생각난 것이다.) 내가 제안하는 방법은 템플릿 특수화..
Part 3, 테크닉 3-8 typelist에 자료형 또는 typelist 추가하기 만약 typelist에 자료형을 추가할 수 있다면 얼마나 좋을까? 왜 좋은지 모르겠다구? 음.. 내가 설명을 정리를 안한게 있나보다. 처음부터 다시 간다면 6개의 타입을 갖는 typelist를 정의 하기 위해선 매크로를 돌려서 typedef TYPELIST_6(float, int, double, unsigned long, long long, float) typelist6; 로 만들어야 할 것이다. 만들고 사용하다 보니, 동일한 타입에 int만을 추가하고 싶다. 자.. 그러면 어떻게 할까? typedef TYPELIST_7(float, int, double, unsigned long, long long, float, int) typelist7; 자 어떤가? .. 아 귀찮아서 못써먹겠다고? 그렇다. 그래서 ..