이번 항목에선 여러 수준의 메모리 관리 개념과, 중요성을 프로그래머에게 알려 준다.

1 ) 메모리 관리자 또는 메모리 할당자는 무엇이며, 그 기본 기능은 무엇인가? C++의 주된 동적 메모리 관리 전략 두가지를 간략히 서술하라.

메모리 관리자(memory manager) 또는 메모리 할당자(memory allocator)는 무엇인가?

말 그대로, 메모리를 관리해 주거나, 할당해 주는 녀석이다.


이 녀석들의 기본 기능은 무엇인가?

메모리를 얻어와 주거나, 메모리를 없애 준다. 경우에 따라선 쓰지 않으면 없애주기도 한다.


C++의 주된 동적 메모리 관리 전략 두가지는 무엇인가?

범용 할당(general-purpose allocation) : 요청된 크기 만큼 메모리를 할당하는 전략, 매우 범용 적으로 사용 할 수 있지만, 단점으론 다른 전략에 비해, 성능이 나쁘고, 메모리 단편화가 잘 일어 날 수 있다.

고정 크기 할당(fixed-size allocation) : 고정된 크기의 메모리를 할당하는 전략, 매우 빠르고, 메모리 단편화가 생기지 않지만, 단점으론 메모리 사용량이 많아 질 수 있다.

쓰레기 수거 할당(garbage-collected allocation)도 있으나, C++ 에선 아직 지원하지 않는다.(구현 할 순 있다. 예로 boost::pool )


2 ) C++ 표준 라이브러리와 그 라이브러리의 구현을 사용하는 전형적인 환경들에서, 어떤 메모리 관리 수준들이 존재하는가? 그 수준들 사이의 관계와 상호작용 방식, 그리고 그 수준들이 책임성을 갖는 방식은 어떤 것인가?

어떤 메모리 관리 수준이 존재 하는가?

운영체제 커널 수준 : 운영체제가 메모리를 관리하는 가장 낮은 수준, 운영체제 또는 하드웨어 마다 다를 수 있다고 책에 나와 있다. Windows 의 경우, 추상화 개층으로 통합된 인터페이스만 제공됨으로 하드웨어 특성은 타지 않는다고봐도 될 듯 싶다. Linux, Unix, Mac X 등등등은 안써봐서 모르겠으나, 역시 마찬가지가 아닐까 한다.

컴파일러 기본 라이브러리 수준 : 컴파일러 구현자가 운영체제 커널 관리를 기반하여, 메모리를 관리하는 중간 수준, 예로 new, malloc 이 여기에 속한다.

표준 컨테이너들과 할당자 수준 : 컴파일러의 기본 라이브러리 수준을 이용하여, 컨테이너 구현자의 입맛에 맞게 메모리를 잡아 주는 높은 수준, 예로 std::allocator 가 있다.

사용자 정의 컨테이너와 사용자 정의 할당자 수준 : 모든 수준들을 사용하여, 메모리를 관리하는 가장 높은 수준


각 수준들의 관계,상호작용,책임성을 갖는 방식은 어떤 것인가?

하위 사용성을 갖는다. 즉, 상위 수준은 하위 수준을 사용 할 수 있으며, 그것으로 구현 할 수 있다. 책임성 역시 높은 놈이 하위 책임을 모두 맡는다. 그러니까, 포함 방식이라 봐도 되겠다.


총평

이번 항목만으로 무엇을 할 수 있는지는 모르겠다. 다음 항목도 봐야 알 듯 싶다. 이번 항목 때문에, "할당자"란 녀석이 어떤 녀석인지 감이 온다.(감만 올 뿐 아직 구현은 못한다. )

posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요