Introduction
Example
public struct Test
{
public bool A;
public short B;
}
static void Main(string[] args)
{
unsafe
{
Console.WriteLine(sizeof(Test)); // 예상 크기 : 3
}
}
/* output:
4
*/
Marshal.SizeOf
- 일반적으로는
sizeof
연산자 대신 Marshal.SizeOf 메서드를 사용한다.
- 런타임에 동작하는
Marshal.SizeOf
메서드는 값 형식과 참조 형식 모두 사용 가능하다.
- 비관리 메모리 영역에 할당될 byte 수를 반환한다.
- 클래스의 경우에는 LayoutKind.Sequential 또는 LayoutKind.Explicit 선언을 해주어야 한다.
static void Main(string[] args)
{
unsafe
{
Console.WriteLine(sizeof(Test));
}
Console.WriteLine(Marshal.SizeOf<Test>());
}
/* output:
4
8
*/
값 형식의 기본 크기
- C# 의 값 형식에 따른 기본 크기는 다음 테이블과 같다.
형식 |
값 (bytes) |
sbyte |
1 |
byte |
1 |
bool |
1 |
char |
2 |
short |
2 |
ushort |
2 |
int |
4 |
uint |
4 |
long |
8 |
ulong |
8 |
float |
4 |
double |
8 |
decimal |
16 |
참조 자료