Compartir a través de


operador sizeof: determine las necesidades de memoria de un tipo determinado

El operador sizeof devuelve el número de bytes ocupados por una variable de un tipo determinado. El argumento del operador sizeof debe ser el nombre de un tipo administrado o un parámetro de tipo que está restringido para ser un tipo no administrado.

El operador sizeof requiere un contexto de unsafe. Sin embargo, las expresiones presentadas en la tabla siguiente se evalúan en tiempo de compilación según los valores de constantes correspondientes y no necesitan un contexto de unsafe:

Expresión Valor constante
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

Tampoco es necesario usar un contexto de unsafe cuando el operando del operador sizeof es el nombre de un tipo enum.

En el siguiente ejemplo se muestra el uso del operador 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)}");
    }
}

El operador sizeof devuelve un número de bytes que asignará Common Language Runtime en la memoria administrada. Para los tipos struct, el valor incluye el relleno, tal y como se muestra en el ejemplo anterior. El resultado del operador sizeof puede ser distinto del resultado del método Marshal.SizeOf, que devuelve el tamaño de un tipo en la memoria no administrada.

especificación del lenguaje C#

Para obtener más información, vea la sección Operador sizeof de la Especificación del lenguaje C#.

Consulte también