정보처리기사 필기를 공부할 때 스택과 힙에 관해 공부했던 것 같은데 합격하고 잊고있다보니 다 까먹어버렸다.

우리가 프로그램을 사용하거나 코드를 실행할 때 운영체제는 미리 메모리 공간을 할당해준다.

메모리 구조 중에 스택과 힙에 대해 간단하게 정리를 해보려고 한다.

 

우선 참고

https://developer-talk.tistory.com/50

 

[C#]값 형식(Value Types)과 참조 형식(Reference Types)

값 형식(Value Types)과 참조 형식(Reference Types) C#에서는 메모리에 공간에 데이터를 할당하는 두 가지 방법이 있습니다. 값 형식(Value Types)은 스택(Stack) 공간에 데이터를 할당하며, 참조 형식(Referenc..

developer-talk.tistory.com

https://junghyun100.github.io/%ED%9E%99-%EC%8A%A4%ED%83%9D%EC%B0%A8%EC%9D%B4%EC%A0%90/

 

스택(Stack)과 힙(Heap) 차이점

해당 Post는 스택(Stack)과 힙(Heap) 차이점를 정리한 파일이다.

junghyun100.github.io

 

* 간단 요약

값 형식은 스택(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 힙
    }
}