1. 메모리 구조란?

언어들을 이용하여 코딩으로 만든 실행파일을 실행시키면, 메모리에 로드되면서 코드에서 작성한 동작에 따라 메모리에 데이터들을 쓰고 읽는다.

2. 구성요소

1) 코드영역(Code)

  • 실행할 프로그램의 소스코드가 저장되는 영역
  • =텍스트 영역
  • 명령문, 제어문, 함수, 상수들이 이 영역에 저장

2) 데이터영역(Data)

  • 작성한 코드에서 전역변수, 정적변수 등이 저장되는 공간
  • 메인(main)함수 전(프로그램 실행 전)에 선언되어 프로그램이 끝날 때 까지 메모리에 남아있는 변수
  • 따라서 프로그램의 시작과 동시에 할당되고, 프로그램이 종료되어야 메모리가 소멸되는 영역

3) 힙영역(Hip)

  • 동적으로 할당 할 변수들이 저장
  • 프로그래머가 원하는 시점에 malloc() 또는 new 연산자를 통해 변수를 메모리에 할당하고,
    free() 또는 delete 연산자를 통해 소멸을 메모리에 가능하도록 하는 영역
  • ex) Java나 C++를 사용한다면
    new 연산자로 생성하는 경우, class, 참조 변수들이 차지
  • Heap 영역은 '메모리의 낮은 주소에서 높은 주소로 할당(적재)' <-Stack 영역과 반대
  • 자바에서 사용하는 class와 그 class 객체들은 이곳에 저장
    택 영역에 할당

4) 스택영역(Stack)

  • 지역변수와 매개변수가 저장되는 공간
  • 따라서 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸한다.
  • 스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출
int main{ func1() }
int func1 { func2() }
int func2 { }

  • 후입선출(LIFO) 방식
    : 가장 늦게 저장된 데이터가 가장 먼저 인출
  • Stack 영역은 '메모리의 높은 주소에서 낮은 주소의 방향으로 할당' <-Hip 영역과 반대

3. 힙영역과 스택영역의 관계

0개의 댓글