티스토리 뷰
RAM, ROM 그리고 메모리 구조
RAM, ROM
RAM(Random Access Memory)
- 자유롭게 내용을 읽고 쓰고 지울 수 있는 기억장치.
- 현재 사용 중인 프로그램이나 데이터가 저장됨.
- 전원이 차단되면 저장된 데이터가 제거되는 휘발성 기억장치.
- 일반적으로 주기억장치 또는 메모리 라고 한다.
ROM(Read-only Memory)
- 이름처럼 읽기전용 메모리.
- 무언가 작성하려면 특수 기기가 필요하고, 삭제나 수정이 불가능한 기억장치.
- Rom 은 주기억 장치 보다 변경 가능성이 없는 시스템 소프트웨어를 저장시키는데 이용한다.
메모리 구조
프로그램이 실행되는 과정
- 사용자가 프로그램 실행을 요청한다.
- 프로그램의 정보를 읽어 메모리(RAM)에 로드(load).
- 프로그램이 실행되면 운영체제는 메모리(RAM)에 공간을 할당해준다.
- CPU 가 기계어로된 코드를 실행한다.
프로그램이 실행되어 RAM에 공간을 할당해줄때 다음과 같이 할당된다.
- 저장되는 순서는 보통 Code(text), Data(GVAR, BSS)가 먼저 할당되고 Heap, Stack 이 할당된다.
1. Text(Code)
- 개발자가 작성한 소스 코드가 기계어(0, 1) 형태로 할당되는 공간.
- 실행할 프로그램의 코드가 Text에 할당된다.
- CPU는 Text 영역에 할당된 명령어를 하나씩 처리한다.
2. Data(BSS, GVAR)
- 전역변수와 정적(static) 변수가 할당되는 공간.
- 프로그램 시작과 동시에 할당되고 프로그램이 종료되면 해제 된다.
- 위의 그림을 보면 알겠지만 초기화 한경우와 초기화 되지 않은 경우를 기준으로 BSS, GVAR 로 나뉘게 된다.
- 초기화된 데이터는 초기값을 ROM에 할당된다. 하지만 초기화 되지않은 데이터가 ROM에 할당되면 안되기때문에(얘까지 저장하려면 ROM 사이즈가 커야함)초기화 되지 않은 데이터는 RAM에 할당하기 위해 나뉘어진다.
3. Heap
- 개발자가 직접 할당,해제 하는 공간
- malloc, new 등을 사용해 동적으로 할당되는 변수들이 Heap 에 할당된다.
- 사용후엔 메모리를 해제 시켜주어야 하며 해제 시키지 않을 경우 memory leak 이 발생한다.(swift 에서는 ARC 가 메모리에서 해제 시켜준다.)
- 낮은주소 -> 높은 주소로 할당된다.
- 할당할것이 많아 Stack 영역까지 침범한경우 Heap OverFlow 가 발생.
4. Stack
- 함수 호출과 관련있는 지역변수, 매개변수, 리턴값 등이 할당되는 공간.
- 함수 호출시 할당되며 함수 호출이 완료되면 메모리에서 해제된다.
- 프로세스가 메모리에 load(로드)될때 stack사이즈가 고정됨.
- 런타임 시 Stack 사이즈를 변경할수 없다.
- 컴파일 할때 결정되기 때문에 무한하게 할당할수 없음.
- 높은주소 -> 낮은주소로 할당된다.
- 함수를 재귀 호출 하여 Stack영역에 해당 함수의 지역변수, 매게변수들이 게속 할당되면 Heap 영역에 침범하게되어 Stack OverFlow 발생.
Heap과 Stack 의 장점과 단점
Heap 의 장단점
- 장점
- 메모리 크기에 대한 제한 없음.
- 본질적인 범위가 전역이며, 프로그램의 모든 함수에서 액세스 할수있다.
- 단점
- 할당작업, 해제 작업으로 인해 속도 저하.
- 힙 손상(이중 해제, 해제후 사용 등등)작업으로 인한 속도 저하.
- 힙 경합(두개 이상의 쓰레드가 동시에 접근하려 할때 lock됨)으로 인해 속도저하.
- 메모리를 직접 관리해야함, 해제 하지 않으면 메모리 누수(memory leak) 발생.
Stack 의 장단점
- 장점
- CPU가 stack 메모리를 효율적으로 구성하기 때문에 속도가 빠르다.
메모리를 직접 해제 해주지 않아도 된다.- 단점
- 메모리 크기에 대한 제한이 있다.
- 지역 변수만 액세스 가능하다.
Heap, Stack 어떤거 사용해야함?
- 데이터의 크기를 모르거나 스택에 저장하기엔 데이터가 너무 크다면 Heap!
- 이를 제외한 상황이라면 Stack!
참고 문서 및 사이트
'Computer Science' 카테고리의 다른 글
Clean Architecture (0) | 2022.07.29 |
---|---|
알고리즘 과 자료구조 (0) | 2022.04.29 |