sizeof, operator — określanie potrzeb pamięci dla danego typu
Operator sizeof
zwraca liczbę bajtów zajmowanych przez zmienną danego typu. Argumentem sizeof
operatora musi być nazwa niezarządzanego typu lub parametru typu, który jest ograniczony jako typ niezarządzany.
Operator sizeof
wymaga niebezpiecznego kontekstu. Jednak wyrażenia przedstawione w poniższej tabeli są obliczane w czasie kompilacji do odpowiednich wartości stałych i nie wymagają niebezpiecznego kontekstu:
Wyrażenie | Stała wartość |
---|---|
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 |
Nie trzeba również używać niebezpiecznego kontekstu, gdy operand sizeof
operatora jest nazwą typu wyliczenia .
W poniższym przykładzie pokazano użycie sizeof
operatora:
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)}");
}
}
Operator sizeof
zwraca liczbę bajtów, które zostaną przydzielone przez środowisko uruchomieniowe języka wspólnego w pamięci zarządzanej. W przypadku typów struktur ta wartość zawiera dowolne wypełnienie, jak pokazano w poprzednim przykładzie. Wynik sizeof
operatora może się różnić od wyniku Marshal.SizeOf metody, która zwraca rozmiar typu w niezarządzanej pamięci.
specyfikacja języka C#
Aby uzyskać więcej informacji, zobacz sekcję operatorów sizeof specyfikacji języka C#.