다음을 통해 공유


sizeof 연산자 - 지정된 형식에 대한 메모리 요구 사항 결정

sizeof 연산자는 지정된 형식의 변수가 차지하는 바이트 수를 반환합니다. 안전 코드에서 sizeof 연산자에 대한 인수는 관리되지 않는 형식 이름 또는 관리되지 않는 형식으로 제한되는 형식 매개 변수여야 합니다. 관리되지 않는 형식에는 모든 숫자 형식, 열거형 형식, 모든 멤버가 관리되지 않는 형식인 튜플 및 구조체 형식이 포함됩니다.

다음 표에 제시된 식은 컴파일 시간에 해당 상수 값으로 평가되며 안전하지 않은 컨텍스트가 필요하지 않습니다.

표현 상수 값
sizeof(sbyte) 1
sizeof(byte) 1
sizeof(short) 2
sizeof(ushort) 2
sizeof(int) 4
sizeof(uint) 4
sizeof(long) 8
sizeof(ulong) 8
sizeof(char) 2
sizeof(float) 4
sizeof(double) 8
sizeof(decimal) 16
sizeof(bool) 1

안전하지 않은 코드에서 sizeof 인수에는 제약이 없는 형식 매개 변수를 포함하여 포인터 형식 및 관리되는 형식이 포함될 수 있습니다. 예를 들어 objectstring.

다음 예제에서는 sizeof 연산자의 사용을 보여 줍니다.

public struct Point
{
    public Point(byte tag, double x, double y) => (Tag, X, Y) = (tag, x, y);

    public byte Tag { get; }
    public double X { get; }
    public double Y { get; }
}

public class SizeOfOperator
{
    public static void Main()
    {
        Console.WriteLine(sizeof(byte));  // output: 1
        Console.WriteLine(sizeof(double));  // output: 8

        DisplaySizeOf<Point>();  // output: Size of Point is 24
        DisplaySizeOf<decimal>();  // output: Size of System.Decimal is 16

        unsafe
        {
            Console.WriteLine(sizeof(Point*));  // output: 8
        }
    }

    static unsafe void DisplaySizeOf<T>() where T : unmanaged
    {
        Console.WriteLine($"Size of {typeof(T)} is {sizeof(T)}");
    }
}

sizeof 연산자는 관리되는 메모리에서 공용 언어 런타임에 의해 할당된 바이트 수를 반환합니다. 구조체 형식의 경우 이전 예제와 같이 해당 값에는 패딩이 포함됩니다. sizeof 연산자의 결과는 관리되지 않는 메모리의 형식 크기를 반환하는 Marshal.SizeOf 메서드의 결과와 다를 있습니다.

안전하지 않은 코드에서 인수가 관리되는 형식인 경우 sizeof 연산자는 해당 형식의 인스턴스에 할당된 바이트 수가 아니라 참조 크기를 반환합니다.

중요하다

sizeof 반환된 값은 관리되지 않는 메모리의 형식 크기를 반환하는 Marshal.SizeOf(Object)결과와 다를 수 있습니다.

C# 언어 사양

자세한 내용은 C# 언어 사양sizeof 연산자 섹션을 참조하세요.

참조