ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메모리 구조 (code,data,stack,heap)
    개발/프로그래밍 2021. 11. 14. 14:52

    메모리는 코드, 데이터, 스택, 힙 으로 구성되어있다.

     

    코드는 개발자 작성한 코드가 바이너리 형태(이진법) 으로 Read-only 로 저장된다. 

     

    데이터는 전역변수 와 static 변수가 저장된다. 프로그램 시작과 함께 메모리에 할당되고 프로그램 종료시 소멸된다.

     

    스택은 지역변수/매개변수가 저장된다. 함수호출시 메모리에 할당되고 함수 종료시 소멸된다. 

     

    코드 / 데이터 / 스택은 모두 컴파일타임에 메모리 크기가 결정된다.

     

    힙은 클래스 인스턴스나 클로저같은 "참조 타입의 값" 의경우 힙에 할당된다. 

    따라서 코드,데이터,스택 과 달리 런타임시 메모리 크기가 결정된다.

    개발자가 할당/해제 하는 영역이다. 이를 동적 할당이라고하며 매모리 해제를 해주지 않는경우

    "메모리 릭" 이 발생한다. swift 는 직접 해제 하지않아도 ARC 에 의해 참조 카운팅이 0 이되는경우

    자동으로 해제된다.

    출처 :https://babbab2.tistory.com/25

    힙과 스택은 다르긴 하지만 같은 메모리 영역을 공유한다.

    0x00000000 (낮은 주소)

    0xfffffffff (높은주소 )

    힙은 낮은주소부터 할당되고 스택은 높은 주소부터 할당된다.

    스택은 메모리가 한정되어있어 작고 힙은 비교적 크지만 둘다 많은 메모리를 할당받으면

    스택오버플로우 / 힙 오버플로우가 발생된다.

     

    댓글

Designed by Tistory.