본문 바로가기

프로그래밍/C++

가상 메모리 (Virtual Memory)

내용이 정말 쉽게쉽게 설명되어 있어서 어느정도 이해가 쉬운 거 같다


코드적인 부분은 자세히 보지 않아서 나중에 한번 더 볼 때는 코드도 따라쳐가면서 봐야겠다


가상 메모리 컨트롤

Reserve는 예약, Commit는 할당, Free는 할당되지 않았음을 의미한다

페이지의 개수 = 가상 메모리의 크기 / 페이지 하나당 크기

페이지 개수는 가상 메모리의 크기에 비례한다

Free->Commit로 변경하는 것은 malloc 함수 호출을 통해 페이지 크기만큼 할당하면 된다

Reserve상태는 Free와 Commit의 중간 상태이다

메모리를 할당하기 전
1.메모리 할당의 시작 주소
2.할당할 메모리의 크기
을 생각해야한다

가상 메모리 시스템은 페이지 단위로 관리된다. 페이지의 중간 위치에서부터 할당을 시작할 수 없으며, 페이지 크기의 배수 단위로 할당을 해야만 한다

Allocation Granularity Boundary
: 메모리 할당의 시작 주소가 될 수 있는 기본 단위

힙 (Heap) : 메모리 공간

디폴트 힙 (Default Heap)
: 프로세스를 생성할 때 더불어 생성되는 힙, 프로세스에 기본적으로 할당되는 힙이라 하여 프로세스 힙 (Process Heap)이라고도 한다

동적 힙 (Dynamic Heap)
: Windows 시스템 함수 호출을 통해서 생성되는 힙

장점 1. 메모리 단편화의 최소화에 따른 성능 향상
: 디폴트 힙을 활용할 경우 프로그램 실행과정에서 무작위 메모리 할당 및 그에 따른 힙 크기의 증가에 의해 메모리 단편화가 심하게

발생한다

단편화가 심하다는 것은 프로그램의 로컬리티 특성이 낮아진다는 것을 의미한다

장점 2. 동기화 문제에서 자유로워짐으로 인한 성능 향상
: 하나의 스레드당 독립된 하나의 힙을 할당할 경우 동기화 처리

를 할 필요가 없어서 성능 향상을 기대할 수 있다

MMF (Memory Mapped File)
: File을 Memory에 Mapping 시킨다는 의미, 파일의 일부 영역을 가상 메모리 일부에 연결시키는 메커니즘

장점 1. 프로그래미하기 편리하다
     2. 성능이 향상된다

Copy-On-Write (COW)
: write할 때 copy하라. 데이터를 쓸 때 복사를 하라는 의미

정적 라이브러리 (Static Library)
: 실행파일 안에 라이브러리가 하나로 묶인다. 실행파일의 크기는 커지지만 실행파일만 있으면 언제 어디서든 실행이 가능하다

DLL (Dynamic Link Library)
: 실행파일 안에 포함되지 않고, 프로그램 실행 시에 참조된다.

실행파일의 크기가 작다. 또 물리 메모리에 한번 올라간 DLL은 둘 이상의 프로세스가 각각 자신의 가상 메모리에 매핑해서 공유하는 구조를 지니기 때문에 메모리 사용에 대한 효율성이 높다

암묵적 연결 (Implicit Linking)
: 소스코드 내에 DLL 연결에 대한 명시적인 코드가 존재하지 않는다

명시적 연결 (Explicit Linking)
: 소스코드 내에 DLL 연결 코드가 명시적으로 존재한다

1독 끝.

'프로그래밍 > C++' 카테고리의 다른 글

auto, decltype, 문자열  (0) 2019.03.08
Lambda (람다)  (0) 2019.03.07
동기화 (Synchronization)  (0) 2019.02.21
커널 영역과 유저 영역  (0) 2019.02.20
스레드 (Thread)  (0) 2019.02.19