[CS] 메모리 구조

hyeona·2024년 2월 7일

CS

목록 보기
1/5
post-thumbnail

📌 메모리 공간


1. 코드(code) 영역

: 실행할 프로그램의 코드가 저장되는 영역 (텍스트 영역이라고도 부른다.)
: CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 된다.



2. 데이터(data) 영역

: 전역/정적변수 저장
: 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다.



3. 스택(stack) 영역

: 함수의 호출과 관계되는 지역 변수매개변수가 저장되는 영역데이터 구조를 저장하는 데 사용되는 메모리 영역
: 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.

✔️ 스택 프레임(stack frame)
: 스택 영역에 저장되는 함수의 호출 정보


(1) 동작

: 푸시(push) 동작으로 데이터를 저장하고, (pop) 동작으로 데이터를 인출한다.

  • 후입선출(LIFO, Last-In First-Out) 방식 사용
    -> 가장 늦게 저장된 데이터가 가장 먼저 인출된다.

  • 메모리의 높은 주소에서 낮은 주소의 방향으로 할당됩니다.


(2) 장점

  • 매우 빠르게 액세스 할 수 있다.
  • CPU에 의해 효율적으로 관리되므로 메모리를 수동으로 할당하거나 해제할 필요가 없다.
    -> 일시적으로 필요한 데이터를 저장하기에 편리하고 안전하다!

(3) 단점

  • 사용 가능한 메모리가 제한되어 있다. (컴파일 시간에 결정된다.)
    -> 스택이 가득차면, 스택 오버플로우가 발생하여 프로그램이 충돌될 수 있다!
    -> 재귀 함수 호출을 피하는 것이 좋다.
  • 변수의 크기 조정이 불가하다.


4. 힙(heap) 영역

: 사용자가 직접 관리해야하는 영역
: 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.
: 스택에 넣기에는 너무 크거나 여러 함수 또는 코드 블록에서 액세스해야 하는 데이터 구조를 저장하는 데 사용되는 메모리 영역

  • 메모리의 낮은 주소에서 높은 주소의 방향으로 할당된다.

(2) 장점

  • 변수는 전역적으로 액세스 할 수 있다.
  • 메모리 크기 제한이 없다.

(3) 단점

  • 엑세스가 느리다.
  • 프로그래머가 메모리를 명시적으로 할당하고 해제해야 한다.
    -> 메모리 할당 : 지정된 크기의 메모리 블록을 예약하는 malloc() 또는 new 함수 호출
    -> 메모리 해제 : free() 또는 delete 함수 호출
  • 효율적으로 공간을 사용하지 않으면 메모리 문제가 일어날 수 있다.
    -> 메모리 누수 : 메모리가 할당되었지만 해제되지 않음
    -> 메모리 손상 : 실수로 데이터를 덮어쓰거나 삭제

0개의 댓글