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#.