C#에서 변수가 차지하는 메모리 크기를 확인할 때는 일반적으로 sizeof 연산자를 사용합니다.
int x; x = sizeof(int);
그렇다면 sizeof를 사용하지 않고도 변수의 크기를 알아낼 수 있을까요? 물론 가능합니다. BitConverter.GetBytes 메서드를 활용하면 됩니다. 이 메서드는 지정된 값을 바이트 배열로 변환해 주므로, 반환된 배열의 길이(Length)를 확인하면 해당 변수의 바이트 크기를 그대로 알 수 있습니다.
// sizeof를 사용하지 않는 방법 byte[] dataBytes = BitConverter.GetBytes(x); int d = dataBytes.Length;
동작 원리를 간단히 살펴보면 다음과 같습니다. int형 값은 4바이트이므로 BitConverter.GetBytes로 변환하면 길이가 4인 바이트 배열이 반환되고, 이 배열의 Length 속성값이 곧 변수의 크기가 됩니다.
다음은 전체 코드입니다.
예제
using System;
class Demo {
public static void Main() {
int x;
// sizeof 사용
x = sizeof(int);
Console.WriteLine(x);
// sizeof를 사용하지 않음
byte[] dataBytes = BitConverter.GetBytes(x);
int d = dataBytes.Length;
Console.WriteLine(d);
}
}출력 결과
4 4
실행 결과를 보면 두 방법 모두 int형의 크기인 4바이트가 동일하게 출력되는 것을 확인할 수 있습니다. 이처럼 BitConverter.GetBytes와 배열의 Length 속성을 조합하면 sizeof 연산자 없이도 변수의 크기를 손쉽게 구할 수 있습니다.