글을 시작하기 앞서 64비트 CPU와 32비트 CPU에 대해 설명하겠다.
CPU는 수많은 레지스터들로 구성되는데 한번에 처리할 수 있는 레지스터 작업량이 정해져 있다. 이때 작업량의 크기에 따라 몇비트CPU인가가 정해진다.
CPU의 작업량의 크기가 메모리 주소의 크기를 결정짓는다.
var var1: Int = 10
위와 같이 코드를 작성했다고 생각보자
Integer의 메모리 크기는 4바이트이다.
64비트 CPU에서 메모리주소가 0xFFFFFFFFFFFFFFFF에서 시작한다고 할때
0xFFFFFFFFFFFFFFFF~0xFFFFFFFFFFFFFFFC 영역을 위변수가 차지하게 된다.
프로세스에 할당된 메모리 공간은 기본적으로 위와같은 영역들로 구분된다.
스택 영역은 함수스택프레임이 쌓이는 공간이다.
함수스택프레임이란 함수안에 내장된 지역변수들과 리턴타입등이 저장된 하나의 꾸러미이다.
함수가 호출되면 Stack영역으로 push되 실행되면 pop되는 방식으로 작동한다.
스택프레임내의 변수
메모리 주소의 시작점
힙 영역은 스택영역과 달리 런타임시 정적으로 할당된 값들과 참조타입으로 선언된 클래스 인스턴스가 저장된다.