충분히 쌓여가는
힙과 참조 형식 본문
힙
힙은 스택처럼 저장된 데이터를 스스로 제거하는 매커니즘을 갖고 있지 않는다
대신 CLR의 Garbage Collector가 프로그램 뒤에서 동작한다
Garbage Collector는 힙에 더 이상 사용하지 않는 객체가 있으면 그 객체를 쓰레기로 간주하고 수거하는 기능을 한다
스택 메모리 영역이 대신 Garbage Collector를 사용하는 이유
스택에 싸힌 데이터들은 코드 블록이 사라지는 시점에 함께 제거된다
그래서 다른 메모리 영역을 CLR이 제공하고, 힙에 데이터를 올려두면 코드 블록이 종료되는 지점과 상관없이 데이터는 유지된다
이후 더 이상 사용하지 않는 데이터가 되었을 때 Garbage Collector로 데이터가 이동한다
참조형식
참조 형식 변수는 힙과 스택을 함께 사용하는데
힙 영역에는 데이터를 저장하고, 스택 영역에는 데이터가 저장된 힙 메모리의 주소를 저장한다
데이터를 직접 저장하는 대신 실제 데이터가 저장된 메모리의 주소를 참조한다고해서 참조 형식이다
CLR 실행 시
{
object a = 10;
object b = 20;
}
실제 값 10, 20은 힙에 저장되고, a와 b는 값이 저장된 힙의 주소만 스택에 저장해둔다
스택은 변수의 생명 주기가 다 하면 자동으로 데이터를 제거하고,
힙은 더이상 데이터를 참조하는 곳이 없을 때 가비지 컬렉터가 데이터를 치워주는 구조의 메모리 영역이다
'이것이 c#이다 > 02 데이터 보관' 카테고리의 다른 글
값 형식과 참조 형식 (0) | 2024.08.31 |
---|---|
변수 Variable (0) | 2024.08.29 |
데이터의 종류 (0) | 2024.08.29 |