CPU는 연산을 처리하기 위해 데이터를 어디에 저장할지 결정해야 한다. 이때 사용하는 저장 장소는 대표적으로 두 가지가 있다:
이 둘은 모두 데이터를 보관하는 공간이지만, 속도, 위치, 용도, 비용에서 차이가 있다.

레지스터는 CPU 내부에 위치한 저장 공간이다. 프로그램 실행 중 필요한 값을 즉시 처리할 수 있도록 고속 접근이 가능한 저장소다.
| 항목 | 설명 |
|---|---|
| 위치 | CPU 내부 |
| 접근 속도 | 매우 빠름 (ns 단위) |
| 용도 | 연산 대상 보관, 명령 주소 저장 등 |
| 크기 | 매우 작음 (몇 Byte ~ 수십 Byte 수준) |
| 수량 | 한정적 (CPU 구조에 따라 고정) |
| 종류 | 설명 |
|---|---|
| PC (Program Counter) | 다음에 실행할 명령어의 주소 |
| IR (Instruction Register) | 현재 실행 중인 명령어 |
| SP (Stack Pointer) | 현재 스택의 꼭대기 주소 |
| General-purpose Register | 연산 중간 결과, 변수 임시 저장 (e.g., eax, rbx) |
프로그램의 연산 속도를 높이기 위해 컴파일러는 자주 사용되는 변수를 레지스터에 할당하려 한다.
메모리(RAM) 는 CPU가 접근할 수 있는 외부 저장소로, 프로그램 코드, 변수, 데이터 등을 보관한다. CPU가 레지스터에서 처리할 수 없는 대부분의 데이터를 메모리에서 불러와야 한다.
| 항목 | 설명 |
|---|---|
| 위치 | CPU 외부, 시스템 버스에 연결됨 |
| 접근 속도 | 느림 (μs~ns 단위) |
| 용도 | 전체 프로그램 코드, 데이터, 힙, 스택 등 저장 |
| 크기 | 수 GB ~ 수십 GB |
| 수량 | 시스템 용량만큼 존재 (확장 가능) |
메모리는 속도는 느리지만 용량이 크고, 프로그램 실행에 필요한 모든 정보를 담고 있다.
| 항목 | Register | Memory |
|---|---|---|
| 위치 | CPU 내부 | CPU 외부 |
| 속도 | 매우 빠름 | 느림 |
| 크기 | 매우 작음 | 큼 |
| 접근 방식 | 직접 접근 | 간접 접근 (버스 경유) |
| 용도 | 연산 처리, 주소 저장 | 코드/데이터 저장 |
| 비용 | 매우 비쌈 | 상대적으로 저렴 |
CPU가 모든 데이터를 메모리에서 가져온다면, 속도 병목(Bottleneck) 이 발생하게 된다. 이를 방지하기 위해, 연산에 꼭 필요한 데이터는 레지스터에 미리 저장해두고 빠르게 접근하는 것이다.
즉, 레지스터는 CPU의 캐시처럼 동작하는 초고속 임시 저장소다.
넓은 의미에서 레지스터도 메모리의 일종이다. 하지만 일반적으로 말하는 '메모리'는 RAM을 가리키며, 레지스터는 CPU 내부에 특화된 저장소로 따로 분류한다.
변수 저장
→ 자주 사용하는 변수는 컴파일러가 레지스터에 저장하도록 최적화한다
→ 일반 변수는 메모리에 저장
성능 최적화
→ 코드 최적화 시, 메모리 접근을 줄이고 레지스터 활용률을 높이는 게 핵심