형식명 |
범위 |
변환 가능 형식 |
bool | true,false | 없음 |
bool? | true,false,null | 없음 |
char | U+0000 ~ U+ffff(유니코드) |
ushort, int, uint, long, ulong, float, double 또는 decimal |
sbyte | -128 ~ 127 | short, int, long, float, double, decimal |
byte | 0 ~ 255 | short, ushort, int, uint, long, ulong, float, double, decimal |
char | U+0000 ~ U+ffff | int, long, float, double, decimal |
short | -32,768 ~ 32,767 | int, long, float, double, decimal |
ushort | 0 ~ 65,535 | int, uint, long, ulong, float, double,decimal |
int | -2,147,483,648 ~ 2,147,483,647 | long, ulong, float, double, decimal |
uint | 0 ~ 4,294,967,295 | long, ulong, float, double, decimal |
long | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 | float, double, decimal |
ulong | 0 ~ 18,446,744,073,709,551,615 | ushort, int, uint, long, ulong, float, double, decimal |
float |
|
double |
double | ±5.0e−324 ~ ±1.7e308 | |
decimal |
±1.0 × 10−28 ~ ±7.9 × 1028 | float, double, decimal |
.NET에서 관리화 되는 인스턴스들은 모두 Reference 형식들이다.(포인터 제외)
.NET의 gc는 관리화 힙에 인스턴스들을 순차적으로 할당을 하고 있으며 GC의 세대 조사에 의해 할당 해제를 하게 된다.
Reference 형식은 관리화 힙에 할당이 되지만 Value 형식은 스택에 인라인 형태로 할당이 되기 때문에 관리화 대상이 아니다.
용어 - GC(가비지 수집-Garbage Collection) [발췌] NET Framework 용어집 바로가기
사용 중인 개체로의 모든 포인터를 전이적으로 추적하여 참조될 수 있는 개체를 찾은 다음 추적 작업에서 찾지 못한 힙 메모리를 다시 사용할 수 있도록 정리하는 프로세스입니다. 공용 언어 런타임 가비지 수집기는 또한 현재 사용 중인 메모리를 압축하여, 힙에 사용되는 작업 공간을 줄입니다.
관리화 대상이 되면 인스턴스의 데이터의 유실과 해제에 대하여 .NET에 의해 관리가 된다는 장점이 있다.
반면, GC에 의해 해제된 조각들에 대해 조각 모음을 할 때 인스턴스의 할당 위치를 변경해야 하는 오버헤드가 생기게 된다.
즉, Value 형식은 관리화 대상이 아니기 때문에 조각모음에 대한 오버헤드를 줄일 수 있다. 물론 C#사용자가 데이터의 유실에 대하여 책임을 져야 할 것이다.
경우에 따라 Value 형식의 인스턴스를 Object형식으로 Boxing하여 관리화 힙에 할당되어 관리될 수 있는데 이때 Object에 인스턴스를 할당하고 Value형식 정보를 기록하고 값을 복사해야 하는 오버헤드를 갖고 있음을 알고 있어야 한다.
즉, Value형식을 Boxing을 하지 않고 사용을 해도 되는 구조에서는 Reference 형식에 비해 오버헤드가 적지만 Boxing을 해야 할 경우에는 Boxing에 대한 오버헤드와 조각모듬에 대한 오버헤드를 갖게 됨을 의미한다.
용어 - boxing [발췌] NET Framework 용어집 바로가기
값 형식 인스턴스를 개체로 변환하는 작업으로, 인스턴스가 런타임에 완전한 형식 정보를 포함하고 힙에 할당되는 것을 의미합니다. MSIL(Microsoft Intermediate Language) 명령 집합의 box 명령은 값 형식을 복사하여, 새로 할당된 개체에 해당 복사본을 포함시켜 값 형식을 개체로 변환합니다
'언어 자료구조 알고리즘 > C# 언어 문법' 카테고리의 다른 글
11.Class (0) | 2009.08.19 |
---|---|
10.Casting (0) | 2009.08.19 |
9.String (0) | 2009.08.19 |
8. Object (0) | 2009.08.19 |
7. 배열 (0) | 2009.08.19 |
5. .NET Framework (0) | 2009.08.19 |
4. const 와 readonly (0) | 2009.08.19 |
3. 소멸자 (0) | 2009.08.19 |
2. 생성자 (0) | 2009.08.19 |
1.Welcome! Here is ehclub.net (0) | 2009.08.19 |