Content
1. 무엇을 메모리 풀 memory pool 이라고 하는가?
메모리 풀을 역활로 정의를 하면, 메모리 할당/해제/용량 최적화 등을 효율적으로 처리해 주는 웅덩이/수영장/도구/장치/관리자 이다. 단어 자체로 정의를 하면, 메모리 저수지 정도로 이해하면 되겠다.
pool 이라는 것을 예를 들면, 농업을 들 수 있다. 농작물을 제배하기 위해선, 물이 필요한데, 기후가 변덕을 부리어, 비가 오지 않을 때, 미리 저수지에 모아 두었던 물을 양수기로 퍼올려 농작물에 물을 공급함으로써, 효율적으로 농작물을 기를 수 있게 된다.
2. 왜 메모리 풀이 필요한가?
첫번째 이유
C/C++ 에선 메모리를 할당 하기 위해서 시스템 콜(OS 내부 함수를 요청)을 해야만 한다. 이 시스템 콜 생각보다 부하를 많이 잡아 먹는다. 이처럼 성능이 스택에 메모리를 생성 하는 것 만큼 빠르지 않으므로, 잦은 할당/해제는 많은 오버헤드를 불러 일으킨다.
두번째 이유
메모리 할당으로 4Byte 를 요구 했을 때, 실제로 4Byte 말고도, 몇 바이트를 할당 했는지, 할당한 메모리에 추가적으로 4Byte ~ 32Byte 를 추가하여 할당을 한다. 왜냐하면, 얼마 만큼 메모리를 할당했는지 기록을 해야 나중에 해제 할 수 있기 때문이다.
이는 메모리를 더 많이 사용하므로, 메모리 고갈을 불러 일으킬 수 있다. 또한 메모리 할당을 더 많이 하므로써, OS의 페이징/프레임 기법에 영향을 미칠 수도 있다. 이는 오버헤드를 불러 일으킨다.
세번째 이유
할당 해제가 잦을 수록 메모리 단편화가 일어 날 수 있다. 단편화가 일어날 경우, 메모리가 여러 곳에 흩어져 있기 때문에, 메모리를 블럭 단위로 끌고 와 처리하는 작업이 더 많이 지게 된다.
하지만...
몇년전인지는 모르겠지만, 메모리 단편화는 신경쓸 필요가 없어졌다. 프로그래밍으로 메모리 할당을 요청한다는 것은 OS에 요청하는 것인데, OS가 메모리 단편화가 일어나지 않게 프레임 기법/페이징 기법을 처리해 주기 때문이다. 만약 임베비드 환경에서, 이러한 기능이 없는 OS가 쓰인다면, 메모리 풀이 필요 할 수도 있다. : )
참조 링크
3. 다른 라이브러리가 있는데 왜 메모리 풀을 만들어야 하는가?
공부하기 위해서다. 알고 쓰는것과 모르고 쓰는건 나중에 버그가 생길 때, 그 버그를 고치는 능력 차이를 만들기 때문이다.
'Programmer의 텅빈 공간 > C/C++' 카테고리의 다른 글
visual studio 단축키 정리 (0) | 2015.08.04 |
---|---|
singleton (0) | 2014.05.06 |
non-mfc에서 TRACE, ASSERT 사용 (0) | 2014.05.06 |
메모리 풀을 왜 사용해야 하는가 ? (0) | 2014.05.06 |
메모리 누수체크 (0) | 2014.05.06 |