Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El operador sizeof devuelve el número de bytes ocupados por una variable de un tipo determinado. En el código seguro, el argumento para el sizeof operador debe ser el nombre de un tipo no administrado integrado cuyo tamaño no depende de la plataforma o un tipo de enumeración.
La documentación de referencia del lenguaje C# cubre la versión más reciente publicada del lenguaje C#. También contiene documentación inicial sobre las características de las versiones preliminares públicas de la próxima versión del lenguaje.
La documentación identifica cualquier característica introducida por primera vez en las últimas tres versiones del idioma o en las versiones preliminares públicas actuales.
Sugerencia
Para buscar cuándo se introdujo por primera vez una característica en C#, consulte el artículo sobre el historial de versiones del lenguaje C#.
Las expresiones presentadas en la tabla siguiente se evalúan en tiempo de compilación con los valores constantes correspondientes y no requieren un contexto no seguro:
| 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 |
El tamaño de los tipos de la tabla anterior es una constante en tiempo de compilación.
Para un tipo de enumeración, el resultado del sizeof operador es el tamaño del tipo entero subyacente de la enumeración. El resultado se calcula en tiempo de compilación.
En código no seguro , puede usar sizeof en cualquiervoid tipo, incluidos los tipos construidos a partir de parámetros de tipo.
Nota:
La característica de versión preliminar de seguridad de memoria disponible en C# 15 le permite usar sizeof en cualquier tipo no administrado fuera de un unsafe contexto.
- El tamaño de un tipo de referencia o puntero es el tamaño de una referencia o puntero, no el tamaño del objeto al que puede hacer referencia.
- El tamaño de un tipo de valor, no administrado o no, es el tamaño de dicho valor.
- El tamaño de un tipo de enumeración es el tamaño de su tipo entero subyacente. Este tamaño es una constante en tiempo de compilación. Si el tipo subyacente de una enumeración definida en un ensamblado al que se hace referencia cambia más adelante, el código que se aplica
sizeofa esa enumeración debe volver a compilarse para observar el nuevo tamaño. - El tamaño de un
ref structtipo es el tamaño del valor. El tamaño de cadarefcampo es el tamaño de una referencia o puntero, no el tamaño del valor al que hace referencia.
En el ejemplo siguiente 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
Console.WriteLine(sizeof(nint)); // output: 8 on 64-bit, 4 on 32-bit
Console.WriteLine(sizeof(nuint)); // output: 8 on 64-bit, 4 on 32-bit
Console.WriteLine(sizeof(Span<int>)); // output: 16 on 64-bit, 12 on 32-bit
}
}
static unsafe void DisplaySizeOf<T>() where T : unmanaged
{
Console.WriteLine($"Size of {typeof(T)} is {sizeof(T)}");
}
}
El operador sizeof devuelve el número de bytes asignados por Common Language Runtime en memoria administrada. Para los tipos de estructura , dicho valor incluye todo relleno, tal como lo demuestra el ejemplo anterior. El resultado del operador sizeof puede diferir del resultado del método Marshal.SizeOf, que devuelve el tamaño de un tipo en memoria no administrada.
Importante
El valor devuelto por sizeof puede diferir del resultado de Marshal.SizeOf(Object), que devuelve el tamaño del tipo en memoria no administrada.
Especificación del lenguaje C#
Para obtener más información, consulte la sizeof sección operador de la especificación del lenguaje C#.