메모리 구조에 대해 발표자료를 만들면서 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
'이론 공부 내용 정리' 카테고리의 다른 글
메모리 구조 정리 (0) | 2023.04.09 |
---|---|
좋은 코드란 무엇인가? (0) | 2023.04.06 |
[CS스터디] 컴퓨터 구조 기초 (0) | 2022.12.26 |
[CS스터디] Design Pattern - Singleton (0) | 2022.12.05 |
[CS스터디] Statement vs PreparedStatement (0) | 2022.12.05 |