정보처리기사 필기를 공부할 때 스택과 힙에 관해 공부했던 것 같은데 합격하고 잊고있다보니 다 까먹어버렸다.
우리가 프로그램을 사용하거나 코드를 실행할 때 운영체제는 미리 메모리 공간을 할당해준다.
메모리 구조 중에 스택과 힙에 대해 간단하게 정리를 해보려고 한다.
우선 참고
https://developer-talk.tistory.com/50
https://junghyun100.github.io/%ED%9E%99-%EC%8A%A4%ED%83%9D%EC%B0%A8%EC%9D%B4%EC%A0%90/
* 간단 요약
값 형식은 스택(Stack) 공간에 데이터를 할당
참조 형식은 힙(Heap) 공간에 데이터를 할당
메서드를 통해 생성된 변수는 스택( Stack)에 할당
new 한정자를 이용한 변수, 오브젝트나 클래스를 참조하는 형식은 힙(Heap)에 할당
값 형식(Value Type)
데이터 값 자체가 스택 메모리 영역에 바로 저장이 된다.
함수를 시작하면 데이터가 순차적으로 생성되고, 함수가 끝난다면 데이터가 순차적으로 소멸된다.
대체로 숫자 형식(byte,short,int,float 등)과 논리 형식(bool)이 해당된다.
참조 형식(Reference Type)
데이터 값이 힙 메모리 영역에 할당되고, 가비지 컬렉터(GC)에 의해 해제된다.
변수가 값 대신에 값이 있는 곳의 위치를 담는 데이터 형식이다.
대체로 문자열, 배열(Array), 클래스(Class), Object 형식이 해당된다.
스택(Stack)
- 정적으로 메모리에 할당
- 스택 영역에 있는 변수들은 선언된 함수를 빠져나가면 없어진다.
- 액세스가 빠르다.
- 지역 변수가 해당된다.
- 변수의 크기를 조정할 수 없다.
// 함수 시작한다~
float a = 10.5f;
int b = 20;
a = 30.5f;
b = 25;
// 함수 끝났다 ~
힙(Heap)
- 동적으로 메모리에 할당
- 스택보다 액세스가 느리다
- 개발자가 원하는 시점에 동적으로 메모리 할당 가능, 이러한 유형의 변수가 할당되는 영역이 힙(Heap)
- 전역 변수가 해당된다.
- 가비지 컬렉터는 힙 영역에서 사용되지 않는 데이터들을 소멸시킴
*(가비지 컬렉터는 다음 기회에 글 쓰기로... 이것 때문에 해제를 꼭 해줘야 한다. 라는 것만 알고 있자.)
Public Class PlayerMove:MonoBehavior
{
private float moveSpeed = 2f; // 전역변수 힙
private float rotateSpeed = 2f; // 전역변수 힙
public void Player()
{
playerStatus status = New playerStatus(); // new 힙
}
}
'유니티 C#' 카테고리의 다른 글
유니티 C#) 생성자와 소멸자 (0) | 2023.01.26 |
---|---|
유니티 C#) Property(속성) 기능 - get/set 키워드를 사용 (1) | 2022.07.24 |
유니티 C#) static은 무엇인가. (0) | 2022.07.24 |
유니티 C#) Dictionary사용법과 ContainsKey 정리 (3) | 2022.07.23 |
유니티 C#) MonoBehavior(모노비헤이비어) 정리 (0) | 2022.07.23 |