Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Оператор sizeof возвращает количество байтов, занятых переменной заданного типа. В безопасном коде аргумент оператора sizeof должен быть именем встроенного неуправляемого типа , размер которого не зависит от платформы.
Справочные документы по языку C# описывают последнюю выпущенную версию языка C#. Она также содержит начальную документацию по функциям в общедоступных предварительных версиях для предстоящего языкового выпуска.
Документация определяет любую функцию, впервые представленную в последних трех версиях языка или в текущих общедоступных предварительных версиях.
Подсказка
Чтобы узнать, когда функция впервые появилась в C#, ознакомьтесь со статьей об истории версий языка C#.
Выражения, представленные в следующей таблице, вычисляются во время компиляции в соответствующие константные значения и не требуют небезопасного контекста:
| Выражение | Константное значение |
|---|---|
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 |
Размер типов в предыдущей таблице является константой во время компиляции.
В небезопасном коде можно использовать sizeof для любого нетипаvoid , включая типы, созданные из параметров типа.
- Размер типа ссылки или указателя — это размер ссылки или указателя, а не размер объекта, на который он может ссылаться.
- Размер типа значения, неуправляемого или нет, является размером такого значения.
- Размер типа — это размер
ref structзначения. Размер каждогоrefполя — это размер ссылки или указателя, а не размер значения, на который он ссылается.
В следующем примере показано использование оператора 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)}");
}
}
Оператор sizeof возвращает количество байтов, выделенных средой CLR в управляемой памяти. Для типов структур , это значение включает любое заполнение, как показано в предыдущем примере. Результат оператора sizeof может отличаться от результата метода Marshal.SizeOf, который возвращает размер типа в неуправляемой памяти.
Важный
Значение, возвращаемое sizeof, может отличаться от результата Marshal.SizeOf(Object), который возвращает размер типа в неуправляемой памяти.
Спецификация языка C#
Дополнительные сведения см. в спецификации языка C# в разделе Оператор sizeof.