본문 바로가기
공부

[C, C++] 메모리 풀(Memory Pool)

by MY블로그 2023. 5. 3.

메모리 풀(Momory Pool)이란?

고정된 크기의 블록을 할당하여 malloc, new 처럼 동적할당을 가능하게 해주는 기능입니다.

기본적으로 C의 동적할당 malloc 이나 C++의 동적할당 new 는 규칙적인크기의 할당이 아니기 떄문에 메모리 단편화를 유발 시키고 파편화된 메모리들은 프로그램의 성능 저하를 유발 합니다.

이를 방지하기 위하여 일정한 크기의 메모리(블록)들을 미리 할당 해 놓고 사용하는 것이 메모리 풀 입니다.

응용 프로그램은 실행 시간에 핸들에 의해서 할당>접근>해제 합니다.

추가적으로 malloc & new 의 동적할당은 할당 및 해제를 실시할 때 마다 운영체제에 요청하는 과정일 발생하는데 이러한 과정또한 줄일 수 있습니다.

 

메모리 풀 에는 고정 방식과 가변 방식의 두가지 방법이 있습니다.

 


 

고정 메모리 풀

고정된 크기의 블록을 갖는 메모리 관리자는 반환된 메모리를 효율적으로 사용 가능합니다.

고정 메모리 풀은 오브젝트(클래스) 단위로 관리 합니다.

같은 크기를 요청하기 대문에 파편화가 발생하지 않습니다.

가지게되는 메모리 관리자는 비교적 쉽게 구현이 가능하며 함수는 Inline이 가능 합니다.

캐시 효율이 좋으며 해제한 노드가 다음에 할당할 노드일 수 있습니다.

위처럼 고정 메모리 풀의 경우 항상 같은 크기를 할당하기 때문에 내부 단편화 및 외부단편화가 없습니다.

위와같이 정해지 크기를 사용하기때문에 크기의 변경이 불가능 합니다.

 

가변 메모리 풀

가변 메모리 풀은 최초의 생성 당시에는 오브젝트의 베이스 규모로 생성하지만 이후에 추가되는 내용물에 따라 각 객체당의 할당 크기가 변동하는 방식 입니다.(단, 최대 사이즈의 제한은 정해져 있습니다)

Free List 라고도 하며 갯수의 파악이 쉽다는 장점이 있습니다.

 


 

메모리 풀의 단점?

미리 할당해놓기때문에 사용하지 않더라도 메모리를 차지하고 있는 방식 입니다.

때문에 유동적으로 사용하는데 있어서 효율이 떨어 질 수 있습니다.

과하게 큰 공간을 미리 잡지 않는다면 상관없으나 주의 해야 합니다.

 

참조 블로그

 

메모리풀

간단하게 말하면, 필요한 메모리 공간을 필요한 크기. 개수 만큼 사용자가 직접 지정하여 미리 할당받아 놓고 필요할 때마다 반납하는 기법을 말합니다.

velog.io

 

메모리 단편화 & 메모리 풀

개요 기존 malloc이나 new연산자의 경우, 사이즈가 고정되지 않아 생성과 삭제를 반복할경우 메모리 단편화 현상이 생긴다. 대충 설명하자면 이런 형태이다. 여기서 중요한점은, 시스템에서 딱히

unrealstudy.tistory.com

 

[C++] 메모리 풀(Memory Pool)

메모리 풀(Memory Pool) 개요 메모리 풀(Memory Pool)은 고정 된 크기의 블록을 할당하여 malloc 이나 C++의 new 연산자와 유사한 메모리 동적 할당을 가능하게 해준다. malloc 이나 new 연산자 같은 기능들은

snowfleur.tistory.com

 

댓글