간단하게 말하면, 필요한 메모리 공간을 필요한 크기. 개수 만큼 사용자가 직접 지정하여 미리 할당받아 놓고 필요할 때마다 반납하는 기법을 말합니다.
C/C++ 에선 메모리를 할당 하기 위해서 malloc()이나 new를 사용합니다. malloc()이나 new을 사용할때마 시스템콜을 발생하게 되고 이는, 메모리할당/해제를 위해 운영체제에 요청을 한다는 것을 의미합니다. 매번 메모리를 할당/해체할때마다 운영체제에 요청을 해야하니 이 과정이 잦을 수록 지나치게 많은 비용이 발생하게 되는 것이죠.
따라서, 매번 OS 호출을 하여 메모리를 할당받았다 반환하는 것보다는, 아예 그 메모리 영역을 계속 들고 있다가 필요할때만 써서 불필요한 OS 호출을 줄이기 위해 메모리 풀이 등장하게 되었습니다.
기존 malloc이나 new연산자의 경우, 사이즈가 고정되지 않아 메모리 할당과 해제를 반복할경우 메모리 단편화 현상이 생기게 됩니다.
메모리 단편화 현상이란, 메모리의 공간이 작은 조각으로 나뉘어져 사용가능한 메모리가 충분히 존재하지만 할당이 불가능한 상태를 말합니다.
메모리 단편화에는 외부단편화와 내부단편화가 있습니다.
메모리의 할당과 해제가 반복되면서 할당된 메모리 사이에 중간중간 빈공간이 생기게 되고 총메모리공간은 충분하지만 연속적인 공간이 아니라서 할당이 될 수 없는 것
→ 메모리풀을 통해, 미리 공간을 할당해놓고 필요할 때 가져다쓰고 반납하기 때문에 외부단편화를 해결할 수 있습니다.
내부단편화
프로세스가 필요한 메모리크기보다 더 많은 크기를 할당받아 사용하는 메모리 공간을 제외하고 낭비되는 공간이 생기는 것
→ 메모리 풀을 통해, 필요한 크기만큼 할당을 해놓기 때문에 불필요한 메모리 할당을 줄여주어 해결합니다.
이로보아, 메모리풀은 메모리의 할당, 해제가 잦은 경우에 메모리 풀을 쓰면 효과적임을 알 수 있습니다.
미리 상대적으로 큰 메모리를 할당하여 사용하기 때문에 사용하지 않는 부분이 미사용 메모리로 남게 됩니다. 물론 최근 하드웨어의 메모리 크기가 커진 관계로 심하게 큰 메모리를 미리 할당 하지 않는 이상 크게 신경쓸 정도는 아닙니다.