본문 바로가기
이론 공부 내용 정리

메모리 구조 글 +a

by mazayong 2023. 4. 9.

메모리 구조에 대해 발표자료를 만들면서 5분 내로 이야기해야 해서 빠진 내용이나, 궁금한 내용들을 추가로 찾아본 게시글이다.

 

1. memory pool?

 

1.1. 정의

고정된 크기의 블록을 할당하여 malloc, c++의 new와 같은 연산자와 유사한 메모리 동적 할당을 가능하게 해주는 전략.

 

1.2. 목적

malloc, new는 다양한 블록사이즈 때문에 단편화를 유발시키고, 파편화된 메모리들은 실시간 시스템에서 사용하기 어렵기 때문이다.

또한, 사용해야 할 리소스는 많지만 메모리 용량은 한정되어 있을 경우에 필요하다.

시스템 콜, 메타 데이터도 메모리 풀의 이용 목적이 된다.

그래서 memory pool이라는 동일한 사이즈의 메모리 블록을 할당해 놓는다. 

그 결과, 응용 프로그램은 실행 시간에 핸들에 의해 표현되는 블록들을 할당, 접근, 해제할 수 있다.

 

1.3. 메모리 풀의 종류

1.3.1. 고정 메모리 풀

- 고정된 크기의 블록을 갖는 메모리 관리자는 반환된 메모리를 효율적으로 재사용할 수 있다.

- 동일한 크기를 요청해 파편화가 발생하지 않는다.

- 구현이 쉽고, 함수는 Inline이 가능하다.

- 메모리 관리자는 캐시 효율이 좋다.

1.3.2. 가변 메모리 풀

 

 

1.4. 특징

- 동적 할당은 Heap 메모리 영역을 사용해서 Heap 영역 자체가 메모리 풀이 된다고 말할 수 있다.

(물론 실제로는 구분되어 있다.)

- 고정된 크기로 할당하는 방식으로 주로 구현하지만, 특정 클래스에 한정되는 단점이 있다.

- 시스템 콜과 메타 데이터는 malloc, new를 이용할 때마다 발생하지만 메모리 풀은 페이지(메모리 블럭의 모음) 단위로 할당하므로 시스템 콜, 메타 데이터에서 자유로워진다. 그리고 오버헤드가 줄어들고, 메모리 용량도 절약된다.

- 비슷한 기법으로 오브젝트 풀 기법이 있다.

 

1.5. 기타

- memory pool vs malloc을 비교함으로써 malloc의 비효율성 설명

https://bloodstrawberry.tistory.com/30

 

- DX와 메모리 풀

https://blog.naver.com/PostView.naver?blogId=ruvendix&logNo=221333044853&redirect=Dlog&widgetTypeCall=true&directAccess=false 

 

- 메모리 풀 구현

https://snowfleur.tistory.com/171