티스토리 뷰

Computer Science

RAM, ROM 그리고 메모리 구조

malrang-malrang 2022. 7. 4. 20:55

RAM, ROM 그리고 메모리 구조

RAM, ROM

RAM(Random Access Memory)

  • 자유롭게 내용을 읽고 쓰고 지울 수 있는 기억장치.
  • 현재 사용 중인 프로그램이나 데이터가 저장됨.
  • 전원이 차단되면 저장된 데이터가 제거되는 휘발성 기억장치.
  • 일반적으로 주기억장치 또는 메모리 라고 한다.

ROM(Read-only Memory)

  • 이름처럼 읽기전용 메모리.
  • 무언가 작성하려면 특수 기기가 필요하고, 삭제나 수정이 불가능한 기억장치.
  • Rom 은 주기억 장치 보다 변경 가능성이 없는 시스템 소프트웨어를 저장시키는데 이용한다.

메모리 구조

프로그램이 실행되는 과정

  1. 사용자가 프로그램 실행을 요청한다.
  2. 프로그램의 정보를 읽어 메모리(RAM)에 로드(load).
  3. 프로그램이 실행되면 운영체제는 메모리(RAM)에 공간을 할당해준다.
  4. 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!

참고 문서 및 사이트

개발자 소들이
kwon's Blog
ssionii Velog

'Computer Science' 카테고리의 다른 글

Clean Architecture  (0) 2022.07.29
알고리즘 과 자료구조  (0) 2022.04.29
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함