주기억장치의 종류에는 크게 RAM과 ROM 두가지가 있고, 메모리는 주로 'RAM'을 지칭한다.
RAM은 실행할 프로그램의 명령어와 데이터가 저장되는데, 이때 전원이 꺼지면 데이터와 명령어 모두 사라진다 (휘발성 저장장치).
주기억장치와 다르게 보조기억장치는 전원을 꺼도 내용을 유지하지만, CPU는 이 보조장치(비휘발성 저장장치)에 직접 접근하지 못한다는 것.
이러한 이유로 보조기억장치에는 보관해야 할 대상을 저장하고, 주기억장치에는 실행해야하는 것들을 저장한다.
ex) CPU가 실행하고 싶은 프로그램이 보조장치에 있다면, 이를 RAM으로 복사하여 저장하고 실행한다.
쉬운 예시로 생각하자면 보조기억장치는 책장, 주기억장치는 책을 읽을 수 있는 책상이다.
메모리 공간은 다음과 같이 4가지로 나뉜다.
보통 우리가 작성한 소스 코드가 들어가는 부분이다.
함수나 제어문 등등이 이 곳에 저장된다.
전역변수, static 변수가 할당되는 영역이다.
프로그램이 종료되어야 메모리가 소멸된다.
프로그램이 자동으로 사용하는 임시 메모리 영역이다.
힙 영역은 동적 메모리가 할당되는 공간이다. 힙은 운영체제가 사용하지 않는 메모리 공간을 모아 놓은 곳이다. 따라서 이 부분은 프로그래머가 할당하고 해제할 수 있다.
특히 힙은 메모리 위쪽부터 할당되고, 스택은 아래쪽부터 할당되는데 이때 서로의 공간을 넘어갈 수 있다. 이것을 Heap overflow, Stack overflow라고 한다.