Reserve 란 연결된 페이지를 미리 할당해놓는것을 의미한다 메모리의 연속성에 있어서 매우 중요하다 Commit 란 Reserve 되어있던 가상 메모리 페이지가 실제로 물리메모리에 할당 되어 있는 상태를 의미한다 Free 란 가상메모리 page 가 null 인 상태를 의미한다. 예약 되어있지도 그렇다고 실제 물리메모리에 매핑되어있지도 않음 Reserve 상태이면 언제든지 해당 페이지를 물리 메모리로 Commit 할수 있다.
특히 배열같은 연속된 메모리 공간이 필요할경우 Reserve 로 미리 메모리를 예약 해놔야 한다. 프로그램 실행시 미리 사용할만큼의 가상메모리 페이지를 reserve 해놓고 실제로 프로그램이 런타임 도중에 메모리를 사용해야해서 할당해야 할경우 commit 해서 메모리를 사용하자 동적 힙을 생성할시 프로그램 구현이 매우 용이해진다 프로그래머는 어떠한 논리적인 객체가 소멸될시에 디폴트 힙에서처럼 해당 힙의 메모리를 할당받아 사용하는 포인터를 찾아다니며 메모리 해제 명령을 할 필요가 없다 해당 객체를 적절한 크기의 (혹은 Grow 가능한 힙으로) 동적힙을 사용하도록 구현한 이후 객체가 소멸할 시 해당 동적힙만 해제하면 된다 ! 너무 편하다 ! 쓰레드 별로 동적 힙을 생성한 이후 쓰레드가 종료될때에 힙을 소멸시키는 방식으로도 유용하고 동적힙으로 미리 어떠한 함수나 자료구조가 사용할 만큼의 힙을 따로 할당한 이후에 사용하도록 명령하면 메모리 단편화 문제가 해소되며 메모리 단편화 문제가 해소되었다는것은 곧 캐쉬의 로컬리티 효과를 극대화 시키며 메모리 단편화 시에 발생하는 메모리 할당 실패 문제로부터 자유로워질 수 .
copy-on-write 란 최적화 기법의 일종으로써 무분별한 copy 를 막고 파일이 write 되기 전까지 최대한 copy를 뒤로 미룸으로써 메모리를 효율적으로 다룰 수 있다 이러한 COW 기법은 전반적으로 매우 많이 쓰이지만 이것을 멀티쓰레드 프로그래밍 관점에서 예를 들어보자면 A 쓰레드와 B 쓰레드는 어떠한 데이터의 테이블을 참조해서 작업을 수행한다고 가정했을때 A 쓰레드와 B 쓰레드 는 데이터를 읽기만 할시에는 두 쓰레드 전부 데이터를 참조만 하면 된다 이럴 경우 문제가 없다. 그러나 A 쓰레드와 B 쓰레드가 데이터를 Read 와 Write 를 전부 해야 한다고 혹은 할 수도 있다고 할시에는 당연히 테이블을 A쓰레드와 B쓰레드를 위해서 복사해줘야 할것이다 하지만 COW 기법에서는 이것을 A,B 쓰레드 전부 원본 테이블을 참조만 하는식으로 시작하고 A쓰레드나 B쓰레드가 데이터의 변경을 가할시 즉, 비로소 Write 할시에 해당 테이블을 복사해서 쓰레드에 넘겨주고 그 테이블의 값을 Write 하는 식으로 구현을 한다.