메모리 구조 모델 정리

최준영·2022년 7월 24일
1

CS내용 정리

목록 보기
1/1

64비트와 32비트


글을 시작하기 앞서 64비트 CPU와 32비트 CPU에 대해 설명하겠다.
CPU는 수많은 레지스터들로 구성되는데 한번에 처리할 수 있는 레지스터 작업량이 정해져 있다. 이때 작업량의 크기에 따라 몇비트CPU인가가 정해진다.
CPU의 작업량의 크기가 메모리 주소의 크기를 결정짓는다.

  • 32비트 CPU는 메모리 주소가 32비트이다.
    • 0x00000000~0xFFFFFFFF까지의 메모리 공간만을 사용할 수 있다
      • 메모리 주소의 제한은 메모리 용량의 제한으로 이어진다.
        • 메모리 주소들 사이의 간격은 1바이트이다. 따라서 32비트 컴퓨터의 메모리 용량은 최대 4GB이다.
  • 64비트 컴퓨터인 경우는 32비트와 다르게 16자리의 16진수로 표현되며 훨씬 더 큰 메모리 용량을 가질 수 있다.

메모리 주소 할당 구조

var var1: Int = 10

위와 같이 코드를 작성했다고 생각보자
Integer의 메모리 크기는 4바이트이다.
64비트 CPU에서 메모리주소가 0xFFFFFFFFFFFFFFFF에서 시작한다고 할때
0xFFFFFFFFFFFFFFFF~0xFFFFFFFFFFFFFFFC 영역을 위변수가 차지하게 된다.

메모리 구조 모델


이미지
이미지 출처

프로세스에 할당된 메모리 공간은 기본적으로 위와같은 영역들로 구분된다.

Stack

스택 영역은 함수스택프레임이 쌓이는 공간이다.
함수스택프레임이란 함수안에 내장된 지역변수들과 리턴타입등이 저장된 하나의 꾸러미이다.

함수가 호출되면 Stack영역으로 push되 실행되면 pop되는 방식으로 작동한다.

  • 스택프레임내의 변수

    • 변수들은 기본적으로 값을 가진다. 컴파일 이전에 정적으로 값이 할당된 변수들은 Stack영역에 값이 기록된다. (변수에 할당되는 것이 값타입 일 때이다.)
  • 메모리 주소의 시작점

    • 스택 영역의 경우 메모리 주소가 High Address부터 시작된다. 메모리 주소값이 높은 곳에서 낮은곳으로 기록되는 구조이다.

Heap

힙 영역은 스택영역과 달리 런타임시 정적으로 할당된 값들과 참조타입으로 선언된 클래스 인스턴스가 저장된다.

  • 메모리 주소의 시작점
    • 스택영역과 달리 힙영역은 낮은 곳에서부터 메모리 주소가 시작되 증가된다.
profile
Developer가 되고싶은 꿈나무

0개의 댓글