Infrastructure
메모리 풀 (Memory Pool)
Hero_O
2022. 7. 22. 08:00
메모리 풀 (Memory Pool)
메모리 풀이란?
메모리 풀은 필요 크기의 메모리를 미리 할당받고, 필요할 때마다 사용하고 반납하는 방법. 메모리 할당과 해제가 자주 일어나는 경우에 적합하다.
메모리풀의 장점
- 메모리를 동적으로 할당받고 해제하는 과정이 자주 반복되게 되면 메모리 단편화 문제가 발생할 수 있다. 이렇게 메모리 단편화가 생기면 사용 가능한 메모리 공간이 줄거나, 읽기•쓰기 성능에 안 좋은 영향을 미칠 수 있다. 메모리 풀을 사용하면 이러한 메모리 단편화 문제를 해결할 수 있다.
2. 메모리 할당및 해제를 위해서는 시스템 콜(System Call)이 필요하다. 시스템 콜은 유저 모드에서 작업을 하는 것보다 더 많은 리소스를 필요로 하는데, 메모리 풀을 사용하게 되면 유저 코스트로 객체를 생성할 수 있어 성능적인 이점을 얻을 수 있다.
- malloc을 사용해 생성된 객체들은 각각 따로 해제해주어야 하는데, 메모리 풀을 사용한 경우 메모리 해제를 단 번에 할 수 있다.
- 한 번에 할당받은 메모리 내에서 객체를 생성하기 때문에 객체를 생성할 때마다 malloc을 호출할 필요가 없어진다.
3. 메모리 블록의 메타정보를 각각 생성할 필요 없어져, 공간 낭비를 줄일 수 있다.
메모리 풀의 문제점
- 메모리 풀은 메모리를 미리 할당하고 있는 방식이기 때문에, 메모리 단편화로 생기는 낭비량보다 사용하지 않는 메모리 풀의 크기가 크다면 메모리 누수가 발생하는 방식이다.