operator sizeof - menentukan kebutuhan memori untuk jenis tertentu
Operator sizeof
mengembalikan jumlah byte yang ditempati oleh variabel dari jenis tertentu. Argumen ke operator sizeof
harus berupa nama jenis tidak terkelola atau parameter jenis yang dibatasi untuk menjadi jenis tidak terkelola.
Operator sizeof
memerlukan konteks yang tidak aman. Namun, ekspresi yang disajikan dalam tabel berikut dievaluasi dalam waktu kompilasi ke nilai konstanta yang sesuai dan tidak memerlukan konteks yang tidak aman:
Ekspresi | Nilai konstanta |
---|---|
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 |
Anda juga tidak perlu menggunakan konteks yang tidak aman bila operand dari operator sizeof
adalah nama dari jenis enum.
Contoh berikut menunjukkan penggunaan operator 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)}");
}
}
Operator sizeof
mengembalikan jumlah byte yang akan dialokasikan oleh runtime bahasa umum di memori terkelola. Untuk jenis struct, nilai tersebut menyertakan padding apa pun, seperti yang diperlihatkan contoh sebelumnya. Hasil operator sizeof
mungkin berbeda dari hasil metode Marshal.SizeOf, yang mengembalikan ukuran jenis dalam memori tidak terkelola.
Spesifikasi bahasa C#
Untuk informasi lebih lanjut, lihat bagian Operator sizeof dari Spesifikasi bahasa C#.