C# 기초

[기초] - C# 클래스의 메모리 할당(값 ,참조 형식) (Stack, Heap)

MuscleDeveloper5683 2024. 4. 27. 19:35
728x90
SMALL

C# 에서 데이터를 메모리에 어떻게 저장할까?

 

- C#에서는 값형식(value type)참조형식(reference type) 두 가지 유형의 데이터 형식을 사용한다.

두 유형은 메모리에서 데이터를 저장하고 다루는 방식에 차이가 있다.

 

 값 형식: 값형식은 변수가 실제 값을 보유한다. 변수에 할당된 값 자체가 스택에 할당된다.

 

[값 형식의 데이터 타입]

 

1. 숫자 데이터 유형 (int, float, double, decimal 등)

2. 논리형 (bool)

3. 문자 (char)

4. 구조체 (struct)

 

값형식 변수는 스택(stack) 메모리에 저된다. 스택 메모리는 일반적으로 고정된 크기를 가지며, 변수가 생성 및 소멸할 때 사용된다.

 

 

 

참조 형식: 변수가 값 대신 실제 데이터가 저장된 위치(주소)를 참조  변수는 해당 데이터의 위치(주소)를 가리킨다. 참조 형식의 인스턴스힙에 할당

 

[참조형식의 데이터 타입]

 

1. 클래스 (class)

2. 배열 (array)

3. 인터페이스 (interface)

4. 대리자 (delegate)

 

 

참조형식 변수는 힙 메모리에 저장된 데이터의 위치를 가리키는 포인터와 같은 역할을 한다.

 

값형식과 참조형식의 차이점

 

  값 형식 참조 형식
메모리할당 값형식은 스택에 직접 값을 저장하므로
이터에 더 빠르게 액세스
할 수 있다.
힙에 데이터가 저장되며, 변수는 데이터의 주소를 가
리키므로 간접적인 액세스가 필요
복사 동작 변수를 다른 변수에 할당하면 해당 값이
복사
된다.
변수를 다른 변수에 할당하면 동일한 데이터 위치를 참조하게 된다.
메모리 관리 스택에서 관리되므로 변수가 범위를 벗어
나면 자동으로 메모리에서 해제
힙에서 관 가비지 컬렉터가 메모리 해제를 관리
널(Null) 값 변수는 기본적으로 널 값을 가질 수 없. 변수는 null로 초기화할 수 있다.

 

 

 

 

위 차이점 예제 코드

 

 

값 형식

 

 

 

 

위에 적은 코드는 아래 그림과 같이 이루어진다.

 

 

결과 값

 

 

 

 

 


 

 

 

참조 형식

 

 

 

 

위에 적은 코드는 아래 그림과 같이 이루어진다.

 

결과 값

 

 

 

 

 

728x90