값 형식과 참조 형식
값 형식(Value Types) : 변수가 값을 담는 데이터 형식, 스택 메모리 영역에 저장된다. 스택은 빠른 메모리 영역으로, 값 형식의 데이터는 메모리에 연속적으로 저장되어 빠른 접근이 가능하다.
종류: C#과 같은 언어에서 기본 데이터 타입(int, double, float, char 등), 구조체(struct), 열거형(enum) 등이 값 형식이다.
메모리 관리: 값 형식은 스택에 저장되므로 스코프가 종료될 때 자동으로 메모리가 해제된다.
복사 시 동작: 값 형식을 다른 변수에 할당하면 원본 데이터의 값이 복사된다. 즉, 두 변수는 독립적인 메모리 공간을 차지하게 되며, 하나의 변수를 수정해도 다른 변수에 영향을 주지 않는다.
int a = 5;
int b = a; // b는 a의 값을 복사합니다. a와 b는 각각 독립적인 메모리 공간을 가집니다.
b = 10; // b의 값을 변경해도 a의 값은 변하지 않습니다.
참조 형식(Reference Types) : 변수가 값 대신 값이 있는 곳의 위치(참조)를 담는 데이터 형식, 힙 메모리 영역에 저장된다. 힙은 더 큰 메모리 영역이며, 동적 메모리 할당이 가능하다. 하지만 스택보다 접근 속도가 느릴 수 있다.
종류: 클래스(class), 배열(array), 문자열(string), 델리게이트(delegate), 인터페이스(interface) 등이 참조 형식이다.
메모리 관리: 참조 형식은 가비지 컬렉터(Garbage Collector)에 의해 관리되며, 더 이상 참조되지 않을 때 메모리가 해제된다.
복사 시 동작: 참조 형식을 다른 변수에 할당하면 원본 데이터의 메모리 주소가 복사된다. 따라서 두 변수는 같은 메모리 주소를 참조하며, 하나의 변수를 수정하면 다른 변수도 영향을 받는다.
class MyClass
{
public int Number;
}
MyClass obj1 = new MyClass();
obj1.Number = 5;
MyClass obj2 = obj1; // obj2는 obj1이 참조하는 동일한 메모리 위치를 참조합니다.
obj2.Number = 10; // obj2의 Number를 변경하면 obj1의 Number도 변경됩니다.
'cs > 운영체제' 카테고리의 다른 글
[운영체제] 운영체제의 메모리를 관리 전략 (0) | 2024.09.10 |
---|---|
[운영체제] 프로세스의 메모리 영역 구조 (0) | 2024.08.26 |