메모리 풀(Momory Pool)이란?
고정된 크기의 블록을 할당하여 malloc, new 처럼 동적할당을 가능하게 해주는 기능입니다.
기본적으로 C의 동적할당 malloc 이나 C++의 동적할당 new 는 규칙적인크기의 할당이 아니기 떄문에 메모리 단편화를 유발 시키고 파편화된 메모리들은 프로그램의 성능 저하를 유발 합니다.
이를 방지하기 위하여 일정한 크기의 메모리(블록)들을 미리 할당 해 놓고 사용하는 것이 메모리 풀 입니다.
응용 프로그램은 실행 시간에 핸들에 의해서 할당>접근>해제 합니다.
추가적으로 malloc & new 의 동적할당은 할당 및 해제를 실시할 때 마다 운영체제에 요청하는 과정일 발생하는데 이러한 과정또한 줄일 수 있습니다.
메모리 풀 에는 고정 방식과 가변 방식의 두가지 방법이 있습니다.
고정 메모리 풀
고정된 크기의 블록을 갖는 메모리 관리자는 반환된 메모리를 효율적으로 사용 가능합니다.
고정 메모리 풀은 오브젝트(클래스) 단위로 관리 합니다.
같은 크기를 요청하기 대문에 파편화가 발생하지 않습니다.
가지게되는 메모리 관리자는 비교적 쉽게 구현이 가능하며 함수는 Inline이 가능 합니다.
캐시 효율이 좋으며 해제한 노드가 다음에 할당할 노드일 수 있습니다.
위처럼 고정 메모리 풀의 경우 항상 같은 크기를 할당하기 때문에 내부 단편화 및 외부단편화가 없습니다.
위와같이 정해지 크기를 사용하기때문에 크기의 변경이 불가능 합니다.
가변 메모리 풀
가변 메모리 풀은 최초의 생성 당시에는 오브젝트의 베이스 규모로 생성하지만 이후에 추가되는 내용물에 따라 각 객체당의 할당 크기가 변동하는 방식 입니다.(단, 최대 사이즈의 제한은 정해져 있습니다)
Free List 라고도 하며 갯수의 파악이 쉽다는 장점이 있습니다.
메모리 풀의 단점?
미리 할당해놓기때문에 사용하지 않더라도 메모리를 차지하고 있는 방식 입니다.
때문에 유동적으로 사용하는데 있어서 효율이 떨어 질 수 있습니다.
과하게 큰 공간을 미리 잡지 않는다면 상관없으나 주의 해야 합니다.
참조 블로그
'공부' 카테고리의 다른 글
[자료구조] 객체 관계 (Object Relationship) (0) | 2023.05.13 |
---|---|
[XML] XML(Extensible Markup Language) 기초 (0) | 2023.05.12 |
[C, C++] 허상포인터(Dangling Pointer) + 와일드포인터(Wild Pointer) + 스마트포인터 (0) | 2023.05.03 |
[C, C++] 동적 할당, 해제 (0) | 2023.05.03 |
[C++] 스네이크 게임 (0) | 2023.04.28 |
댓글