sizeof – určení potřeb paměti pro daný typ
Operátor sizeof
vrátí počet bajtů obsazených proměnnou daného typu. Argumentem sizeof
operátoru musí být název nespravovaného typu nebo parametr typu, který je omezen na nespravovaný typ.
Operátor sizeof
vyžaduje nebezpečný kontext. Výrazy uvedené v následující tabulce se však vyhodnocují v době kompilace odpovídajícími konstantními hodnotami a nevyžadují nebezpečný kontext:
Výraz | Konstantní hodnota |
---|---|
sizeof(sbyte) |
1 |
sizeof(byte) |
0 |
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) |
0 |
Také nemusíte používat nebezpečný kontext, pokud operand sizeof
operátoru je název typu výčtu.
Následující příklad ukazuje použití operátoru 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)}");
}
}
Operátor sizeof
vrátí řadu bajtů, které by byly přiděleny modulem CLR (Common Language Runtime) ve spravované paměti. U typů struktur tato hodnota zahrnuje všechny odsazení, jak ukazuje předchozí příklad. Výsledek operátoru sizeof
se může lišit od výsledku Marshal.SizeOf metody, který vrátí velikost typu v nespravované paměti.
specifikace jazyka C#
Další informace naleznete v části Operátor sizeof specifikace jazyka C#.