본문 바로가기
Android (Kotlin)/kotlin 문법

동적 메모리 할당 (Dynamic Allocation) | 스택(Stack) vs 힙(Heap)

by 키윤 2023. 12. 12.

동적할당이란 ? 

컴퓨터 프로그래밍에서 실행 중(런타임)에 사용할 메모리 공간을 할당하는 것

프로그램이 실행 되기 전 컴파일 시점에서 주로 소스 코드를 읽고 메모리 공간을 확보한다. 이를 정적 할당 (static allocation)이라고 한다. 

동적 할당이란 컴파일 타이미 아닌 프로그램이 실행되는 중인 런타임에 필요한 만큼의 메모리 공간을 확보하는 것을 의미한다.

  • 동적 할당을 해주면 적절한 메모리 할당을 통해 메모리 공간을 효율적으로 사용할 수 있다.
  • 또한 다 사용했을 때 free 시켜줌으로써 메모리 공간을 헤제해 주어 한정되 메모리 공간을 효율적으로 사용할 수 있게 된다.

Thread Stacks 

  • 1 thread 당 1 stack.
  • thread에서만 사용되는 정적 데이터/메소드/함수프레임/포인터/객체 저장
  • 모든 thread에서 접근 가능
  • 함수가 실행되는 한 변수가 존재한다.
  • heap 메모리에 비해 작음
  • LIFO : Last In First Out Fasion
  • Throws "StackOverFlowError" Exception

Heap Memory

  • 객체/동적 데이터 저장
  • 모든 thread에서 접근 가능
  • 사용하지 않은 객체는 Garbage Collector 이 처리
  • Heap 사이즈는 RAM에 따라 다름
  • 가상 공간에 메모리 할당 가능?
  • throws "OutOfMemorError" Exception

코드에서의 예시: [https://innovorder.dev/how-to-get-rid-of-memory-leaks-6aaf06451bdf]