- 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일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)