Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Operator sizeof mengembalikan jumlah byte yang ditempati oleh variabel dari jenis tertentu. Dalam kode aman, argumen ke sizeof operator harus berupa nama jenis tidak terkelola bawaan yang ukurannya tidak bergantung pada platform.
Referensi bahasa C# mendokumentasikan versi bahasa C# yang paling baru dirilis. Ini juga berisi dokumentasi awal untuk fitur dalam pratinjau publik untuk rilis bahasa yang akan datang.
Dokumentasi mengidentifikasi fitur apa pun yang pertama kali diperkenalkan dalam tiga versi terakhir bahasa atau dalam pratinjau publik saat ini.
Petunjuk / Saran
Untuk menemukan kapan fitur pertama kali diperkenalkan di C#, lihat artikel tentang riwayat versi bahasa C#.
Ekspresi yang disajikan dalam tabel berikut dievaluasi pada waktu kompilasi ke nilai konstanta terkait 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 |
Ukuran jenis dalam tabel sebelumnya adalah konstanta waktu kompilasi.
Dalam kode yang tidak aman , Anda dapat menggunakan sizeof pada jenis non apavoid pun, termasuk jenis yang dibangun dari parameter jenis.
- Ukuran referensi atau jenis penunjuk adalah ukuran referensi atau penunjuk, bukan ukuran objek yang mungkin dirujuknya.
- Ukuran jenis nilai, tidak dikelola atau tidak, adalah ukuran nilai tersebut.
- Ukuran jenis
ref structadalah ukuran nilai. Ukuran setiaprefbidang adalah ukuran referensi atau penunjuk, bukan ukuran nilai yang dirujuknya.
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
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)}");
}
}
Operator sizeof mengembalikan jumlah byte yang dialokasikan oleh common language runtime dalam memori terkelola. Untuk struktur jenis , nilai tersebut mencakup padding apa pun, seperti yang ditunjukkan dalam contoh sebelumnya. Hasil operator sizeof mungkin berbeda dari hasil metode Marshal.SizeOf, yang mengembalikan ukuran jenis dalam memori yang tidak dikelola.
Penting
Nilai yang dikembalikan oleh sizeof dapat berbeda dari hasil Marshal.SizeOf(Object), yang mengembalikan ukuran jenis dalam memori yang tidak dikelola.
Spesifikasi bahasa C#
Untuk informasi selengkapnya, lihat bagian operator sizeof pada dari spesifikasi bahasa C# .