Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Operátor sizeof vrátí počet bajtů obsazených proměnnou daného typu. V bezpečném kódu musí být argument sizeof operátoru názvem předdefinovaného nespravovaného typu , jehož velikost není závislá na platformě.
Referenční dokumentace jazyka C# dokumentuje naposledy vydané verze jazyka C#. Obsahuje také počáteční dokumentaci k funkcím ve verzi Public Preview pro nadcházející jazykovou verzi.
Dokumentace identifikuje všechny funkce, které byly poprvé představeny v posledních třech verzích jazyka nebo v aktuálních verzích Public Preview.
Návod
Informace o tom, kdy byla funkce poprvé představena v jazyce C#, najdete v článku o historii verzí jazyka C#.
Výrazy uvedené v následující tabulce se vyhodnocují v době kompilace s odpovídajícími konstantními hodnotami a nevyžadují nebezpečný kontext:
| Výraz | Konstantní hodnota |
|---|---|
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 |
Velikost typů v předchozí tabulce je konstanta kompilace.
V nebezpečném kódu můžete použít sizeof jakýkoli jinývoid typ, včetně typů vytvořených z parametrů typu.
- Velikost odkazu nebo typu ukazatele je velikost odkazu nebo ukazatele, nikoli velikost objektu, na který může odkazovat.
- Velikost typu hodnoty, nespravovaného nebo nespravovaného typu, je velikost takové hodnoty.
- Velikost
ref structtypu je velikost hodnoty. Velikost každéhorefpole je velikost odkazu nebo ukazatele, ne velikost hodnoty, na kterou odkazuje.
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
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)}");
}
}
Operátor sizeof vrátí počet bajtů přidělených modulem CLR (Common Language Runtime) ve spravované paměti. Pro typy struktury, tato hodnota zahrnuje veškerou výplň, 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.
Důležitý
Hodnota vrácená sizeof se může lišit od výsledku Marshal.SizeOf(Object), který vrátí velikost typu v nespravované paměti.
Specifikace jazyka C#
Další informace najdete v tématu Oddíl operátoru sizeof specifikace jazyka jazyka C#.