728x90
C# 자료형 - Value Type, Reference Type
1) 값 형 (Value Type)
실제 데이터 값을 저장하는 자료형.
ex) int, char, bool, enum, struct 등
2) 참조형 (Reference Type)
값이 저장되어 있는 곳의 위치(주소값)를 저장하는 자료형.
ex) string, object 등
- 스택(Stack) 영역과 힙(Heap) 영역을 동시에 이용함.
- 스택 영역 - 데이터의 주소 저장.
- 힙 영역 - 데이터의 값 저장.
- 코드 블록이 끝나면 스택에 있는 데이터의 주소는 사라진다.
- 힙에 있는 데이터의 값은 남게 되는데 이때 GC(가비지 컬렉터)가 힙을 청소한다.
C# 메모리 구조 - Code, Data, Stack, Heap
1) 코드(Code)
프로그램의 소스 코드가 저장되는 공간.
- 프로그램을 실행하면 클래스 내부의 변수나 함수를 변경할 수 없다.
- 코드 영역에 클래스 자체가 존재하기 때문.
2) 데이터 (Data)
프로그램 시작과 동시에 할당되는 메모리 공간.
- 저장되는 데이터 형식: 전역변수, static
- 프로그램 시작과 동시에 데이터를 메모리에 저장 → 프로그램 종료 시 해제.
- 프로그램 실행 시, 프로그램 종료 전까지 메모리 영역에 존재하기 때문에 다른 메서드에서 공용 변수로 사용할 수 있다.
3) 스택 (Stack)
호출한 함수를 위해 할당되는 메모리 공간.
- 저장되는 데이터 형식: 값 형식(Value Type) - 지역변수, 매개변수
- 함수가 실행되며 데이터를 메모리에 저장 → 함수 수행 후 메모리 해제되며 데이터도 해제.
- LIFO(Last In First Out).
- 함수 수행이 끝나면 메모리가 자동으로 해제되기 때문에 관리할 필요가 없음.
4) 힙 (Heap)
참조 형식을 위해 할당되는 메모리 공간.
- 저장되는 데이터 형식: 참조 형식(Reference Type) - 인스턴스
- 프로그램 프로세스가 사용할 수 있게 미리 예약된 메인 메모리 영역.
- 가변적인 양의 데이터를 저장.
- 계층 구조
- 중간 메모리가 해제되면 계층 구조가 사라지거나 노드 사이 관계가 사라짐. → 빈 공간
- 힙은 GC로 관리가 되는 영역.
인스턴스(instance)
: 클래스가 힙 메모리 공간에 생성된 상태.
→ 클래스가 생성될 때마다 매번 다른 메모리 공간을 가짐.
[C# 기초] 클래스(Class), 인스턴스(Instance), 인스턴스 생성
클래스(Class) 일종의 타입이자 틀. 인스턴스(Instance) 클래스를 객체로 만드는 과정(인스턴스화)을 통해 만들어진 객체. -> 데이터가 저장되어 있는 메모리의 주소값이 저장됨. 인스턴스 생성 (1)CLAS
it-amin.tistory.com
학습을 진행하며 제가 이해한대로 작성하였기 때문에 틀린 부분이 있을 수 있습니다.
참고한 사이트는 하단에 기재하였습니다.
감사합니다.
참고 사이트)
C# 메모리 구조
메모리 구조에 대한 설명
velog.io
Memory 구조
Memory 데이터의 저장공간. 이 데이터 저장공간에는 여러 데이터 타입들 각각의 저장공간이 존재한다. 보통 data, stack, heap 정도로 분류된다. C# 의 자료형에는 값 형식 ( value type )과 참조 형식 ( refer
godnr149.tistory.com
[C#] 메모리(+ 가비지)
1. C# 메모리 구조 2. C# 메모리 관리 1. C# 메모리 구조 메모리의 영역에는 4가지가 있습니다. Stack 영역 지역 변수, 매개 변수를 저장. 컴파일 시점에 크기를 할당하는 정적 할당을 사용 Heap 영역 사
geukggom.tistory.com
728x90
반응형
'개발 공부 > C# 기초' 카테고리의 다른 글
[C# 기초] 클래스(Class), 인스턴스(Instance), 인스턴스 생성 (0) | 2023.01.17 |
---|---|
[C# 기초] List 값 출력(for문, foreach문) (0) | 2022.11.22 |
[C# 기초] 메서드 오버로딩(Method Overloading), 디폴트 매개변수(Default Parameter) (0) | 2022.10.18 |
[C# 기초] ExpandoObject(인스턴스 생성/속성, 메서드, 이벤트 추가) (0) | 2022.10.14 |
[C# 기초] 컴파일(Compile), 런타임(Run time) (0) | 2022.10.14 |