메모리 구조

kingyong9169·2021년 8월 8일
0

기술면접스터디

목록 보기
3/6

메모리

  • 프로그램 실행 순서

    위 그림과 같이, 프로그램이 실행되기 위해서는 운영체제가 프로그램의 정보를 메모리에 로드해야 합니다.
    또한, 프로그램이 실행되는 동안 CPU가 코드를 처리하기 위해서는, 메모리가 명령어와 데이터들을 저장해야 합니다.

  • 메모리 공간

    이렇게 프로그램이 운영체제(os)로부터 할당받는 대표적인 메모리 공간은 코드(code) 영역, 데이터(data) 영역, 힙(heap) 영역, 스택(stack) 영역으로 구성되어 있습니다.

코드(code) 영역

실행할 프로그램의 코드가 저장되는 영역
텍스트 영역이라고 부르기도 합니다.

사용자가 프로그램 실행 명령을 내리면 OS가 HDD에서 실행 코드를 메모리에 올리게 되고, CPU는 코드 영역에 저장된 명령을 하나씩 가져와서 처리하게 됩니다.
프로그램이 시작하고 종료될 때까지 메모리에 계속 남아있습니다.

데이터(data) 영역

프로그램의 전역 변수와 정적(static)변수가 저장되는 영역

프로그램의 시작과 함께 할당되며 프로그램이 종료되면 소멸합니다.

힙(heap) 영역

  • 힙 영역과 스택 영역

    프로그래머가 직접 공간을 할당, 해제하는 메모리 공간

힙 영역에서 malloc() 또는 new연산자를 통해 메모리를 할당하고, free()또는 delete 연산자를 통해 메모리를 해제한다.
힙 영역은 FIFO(선입선출)의 방식으로, 가장 먼저 들어온 데이터가 가장 먼저 인출됩니다.
이는 힙 영역이 메모리의 낮은 주소에서 높은 주소의 방향으로 할당되기 때문입니다.

위의 그림으로 설명하면, 위(낮은 주소)부터 차곡차곡 아래(높은 주소)방향으로 데이터가 쌓인다고 생각하면 됩니다.

스택(stack) 영역

  • 힙 영역과 스택 영역

    프로그램이 자동으로 사용하는 임시 메모리 영역

함수 호출 시 생성되는 지역 변수와 매개 변수가 저장되는 영역이고, 함수 호출이 완료되면 사라집니다.
이때 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame) 이라고 합니다.

스택 영역에서 푸시(push)데이터를 저장하고, 팝(pop) 으로 데이터를 인출합니다.
스택 영역은 후입 선출(LIFO, Last-In First-Out) 의 방식으로, 가장 나중에 들어온 데이터가 가장 먼저 인출됩니다.
이는 스택 영역이 메모리의 높은 주소에서 낮은 주소의 방향으로 할당 되기 때문입니다.
위의 그림으로 설명하면, 가장 아래(높은 주소)부터 차곡차곡 위(낮은 주소)의 방향으로 데이터가 쌓인다고 생각하면 됩니다.

Reference

망나니 개발자님의 블로그
all young님의 블로그

profile
Detail makes difference.

0개의 댓글