본문 바로가기

Today I Learned

23.01.17 - 메모리

참고자료로 주신 책에 적혀있는 컴퓨터 구조와 CPU를 정리했다.

https://cppking.tistory.com/190

 

[CS] 컴퓨터 구조와 CPU

메인 메모리 (RAM) 컴파일이 완료된 프로그램 코드가 올라가서 실행되는 영역 프로그램을 다운 받으면 하드디스크에 저장되지만, 실행하면 프로그램이 메인 메모리에 올라간다. 입출력 버스 (I/O

cppking.tistory.com

 

프로그래밍에서 우리가 보통 사용하는 메모리는 메인 메모리(RAM)이다.

메모리는 4개의 영역으로 나누어진다.

코드(Code)

우리가 작성한 코드를 이진수로 변환해 저장한다.

 

데이터(Data)

전역 변수와 정적 변수(static)가 저장된다.

컴파일 시 메모리를 할당하고 프로그램이 종료될 때 메모리를 반환한다.

 

힙(Heap)

사용자가 직접 메모리를 할당하고 해제할 수 있다.

 

스택(Stack)

지역 변수와 매개변수가 저장된다.

컴파일 시 메모리를 할당하고 함수가 종료될 때 메모리를 반환한다.

 

 

그 외에 RAM의 특징은 컴퓨터 전원이 꺼지면 초기화 되는 휘발성 메모리라는 것과 가상 메모리를 가지는 것이 있다.

가상 메모리는 참고자료 책을 보다보니 정확한 과정을 알려면 너무 어려워서 지금은 간단하게만 짚고 넘어가려 한다.

 

가상 메모리는 실제 메모리 공간보다 훨씬 크고 가상 메모리를 페이지라는 단위로 나누어

페이지를 실제 메모리 공간에 대응 시켜 메모리를 할당한다. 

그런데 만약 실제 메모리가 할당이 다 끝나버리면 어떻게 해야 할까?

메모리 블록을 하드디스크 공간에 저장하고 RAM에 새롭게 메모리를 할당하면 문제를 해결할 수 있다.

그렇지만 하드디스크에 저장된 메모리 블록을 접근할 때느리다는 문제가 있다.

그래서 만들어진 것이 스왑 파일인데 하드디스크에 저장된 메모리 블록에 접근할 때는 
RAM에 저장되어 있는 메모리 블록과 바꿔치기 하는 것이다.

'Today I Learned' 카테고리의 다른 글

23.01.19 - 포인터 기초  (0) 2023.01.19
23.01.18 - 메모리2, 함수, 정적 변수(static)  (0) 2023.01.18
23.01.16 - 디버깅 고급  (0) 2023.01.17
23.01.13 - 분기문, 난수 생성  (0) 2023.01.13
23.01.12 - 연산자2, 분기문  (0) 2023.01.12