Stack 영역

  • LIFO(Last in, First out) 방식으로 데이터가 저장된다.
  • 할당과 해제가 자동으로 이루어진다.
  • 값 타입을 저장한다.
  • 수명이 짧은 편이다. (함수가 return되는 즉시, 모든 지역변수가 pop된다!)
  • 실행할 수 없다. (누군가가 Stack에 코드를 써넣을 수도 있다. 이게 해킹 수단이 될 수도 있다!)
  • 높은 주소 -> 낮은 주소 순으로 할당된다.

Heap 영역

  • 프로그래머가 직접 할당과 해제를 해야 한다.
  • 참조 타입을 저장한다.
  • 실행할 수 없다. (마찬가지로 Heap에도 코드를 주입할 수 있기 때문)
  • 낮은 주소 -> 높은 주소 순으로 할당된다.

여기서 값 타입이란? 변수에 값을 저장하는 타입을 뜻한다. 이는 두 가지 특징을 지니는데;

  1. 다른 변수에 할당하거나 함수로 전달하는 경우, 값이 복사된다.
  2. 복사되기 때문에 원본 값이 변경되지 않는다.

여기서 참조 타입이란? 주소를 저장하는 타입을 뜻한다. 이는 두 가지 특징을 지니는데;

  1. 다른 변수에 할당하거나 함수로 전달하는 경우, 같은 객체를 참조한다.
  2. 한쪽에서 데이터를 변경하면, 모두가 영향을 받는다.

 

+ Recent posts