[java] 2차원 배열 메모리 할당 방식

나호영·2023년 3월 3일
int[] arr = int[5]

위와 같은 코드가 실행 될 때, arr이라는 참조 변수는 stack에 저장되고 실제 값들은 heap 영역에 차례대로 공간을 할당해 저장된다. arr은 실제 값들이 있는 곳의 시작 주소를 의미하는 참조값을 가진다.

int[][] arr = new int[5][]
arr[0] = new int[3]
arr[1] = new int[3]
arr[2] = new int[3]
arr[3] = new int[3]
arr[4] = new int[3]

위와 같은 2차원 배열을 살펴보자. arr은 마찬가지로 참조 변수로써 stack에 저장된다. 이 때 arr은 heap 영역에 생성된 arr[0]~arr[4]의 주소를 의미하는 참조값을 가진다. 각 arr[i]는 다시 new로 생성된 배열, 즉 실제 값들이 저장되어 있는 heap 영역의 메모리의 시작 주소를 가리킨다. 따라서 int [5][] 와 두번 째 인덱스를 비워두고 생성도 가능한 것이고(배열이 얼마나 큰지 알 필요 없음. 첫번 째 인덱스에 적어둔 것 만큼 heap 영역에 배열에 대한 메모리를 할당하면 되니까), 응용하여 아래와 같은 가변 배열도 만들 수 있다.

int[][] arr = new int[5][]
arr[0] = new int[1]
arr[1] = new int[3]
arr[2] = new int[4]
arr[3] = new int[1]
arr[4] = new int[2]
profile
공부 내용 기록

0개의 댓글