• 티스토리 홈
  • 프로필사진
    SiJun-Park
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
SiJun-Park
  • 프로필사진
    SiJun-Park
    • 분류 전체보기 (190)
      • Unity (148)
        • 출시 해보기 (Slime Company) (3)
        • 뱀서류 Project (34)
        • Defense Project (20)
        • FPS Project (30)
        • RPG Project (39)
        • 기타 - 개발 (22)
      • 개발 (35)
        • 임베디드 소프트웨어 (7)
        • 컴파일러 (6)
        • 기계학습 (8)
        • 보안 (8)
        • 그래픽스 (2)
        • 그 외 (4)
      • 코딩문제 (6)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • Heap과 Stack에 대해 공부
        2025년 12월 21일
        • SiJun-Park
        • 작성자
        • 2025.12.21.:53

        기본이지만 한번 더 까먹지 않기 위해서 공부한 내용입니다.

         

        Stack과 Heap의 메모리 관점

        Stack

        - 함수 호출 시 자동으로 쌓였다가 빠지는 메모리

        - 컴파일 시 크기 결정

        - 접근 속도가 빠름

        - 생명주기가 명확하여 함수가 끝나면 자동으로 해제

        - 값 타입이 주로 저장이 된다.

        저장이 되는 것

        - 지역 변수

        - 매개 변수

        - 값 타입 (int, float, struct, bool 등)

        - 참조 타입의 참조 주소

         

        void Test()
        {
            int a = 10;        // Stack
            float b = 3.14f;   // Stack
        }

        Heap

        - 런타임에 동적으로 할당

        - 크기 유동적

        - GC가 관리

        - 접근 속도는 Stack보다 느림

        - 참조타입 실제 데이터 저장

        저장이 되는 것

        - Class

        - object

        - string

        - array

        - new로 생성한 객체

         

        class Player
        {
            public int hp;
        }
        
        void Test()
        {
            Player p = new Player(); 
            // p (주소)는 Stack
            // Player 객체는 Heap
        }

         

        구조를 그림으로 그리면 밑과 같다

        Stack                Heap
        ----------------     ----------------
        p (주소)   ------->  Player { hp = 100 }

        Stack에는 "어디에 있는지"

        Heap에는 "실제 내용"

         

        값 타입 vs 참조 타입

        값 타입

        - 데이터 자체를 복사

        - 보통적으로 Stack에 저장

        - 서로 완전히 독립

         

        void ValueTypeExample()
        {
            int a = 10;
            int b = a;   // 값 복사
        
            b = 20;
        
            Debug.Log(a); // 10
            Debug.Log(b); // 20
        }

        b를 바꿔도 a가 안바뀌는 독립성을 가지고 있음

         

        참조 타입

        - 주소(참조)만 복사

        - 실제 데이터는 Heap

        - 같은 객체를 가리킴

         

        class Data
        {
            public int value;
        }
        
        void ReferenceTypeExample()
        {
            Data a = new Data();
            a.value = 10;
        
            Data b = a;   // 주소 복사
            b.value = 20;
        
            Debug.Log(a.value); // 20
        }

         

        주소를 복사하기 때문에 a의 값도 변하게 되는 것

         

        함수 호출 관점에서의 차이

        void AddValue(int x)
        {
            x += 10;
        }
        
        void Test()
        {
            int a = 5;
            AddValue(a);
        
            Debug.Log(a); // 5
        }

        x는 a의 복사본이다.

        class Box
        {
            public int value;
        }
        
        void AddValue(Box box)
        {
            box.value += 10;
        }
        
        void Test()
        {
            Box b = new Box();
            b.value = 5;
        
            AddValue(b);
        
            Debug.Log(b.value); // 15
        }

        같은 heap 객체를 수정

         

         

        정리

        stack은 함수 단위로 자동 관리되는 빠른 메모리이고, Heap은 런타임에 동적으로 할당되며 GC가 관리하는 메모리입니다.

        값 타입은 데이터를 복사하고, 참조 타입은 주소를 복사합니다.

         

        'Unity > 기타 - 개발' 카테고리의 다른 글

        GetComponent 공부 기록  (0) 2025.12.30
        Coroutine 공부 기록  (0) 2025.12.30
        Text와 TextMeshPro 공부  (0) 2025.12.20
        Playfab 닉네임 동기화 문제  (0) 2025.07.04
        코드 파일 클릭 시 sin 연동 안됨 문제  (0) 2025.04.28
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바