sizeof işleci - Belirli bir tür için bellek gereksinimlerini belirleme
sizeof
işleci, belirli bir türdeki değişkenin kapladığı bayt sayısını döndürür. Güvenli kodda, sizeof
işlecinin bağımsız değişkeni, yönetilmeyen tür adı veya kısıtlanmış yönetilmeyen bir tür olması için tür parametresi olmalıdır. Yönetilmeyen türler; tüm sayısal türleri, numaralandırma türlerini ve üyelerinin tamamı yönetilmeyen türlerden oluşan demet ve yapı türlerini içerir.
Aşağıdaki tabloda sunulan ifadeler, derleme zamanında karşılık gelen sabit değerlere göre değerlendirilir ve güvenli olmayan bir bağlam gerektirmez:
İfade | Sabit değer |
---|---|
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 |
Güvenli olmayan kodda, sizeof
’a verilen bağımsız değişken, kısıtlanmamış tür parametreleri de dahil olmak üzere, işaretçi türlerini ve yönetilen türleri içerebilir. Örnek olarak object
ve string
verilebilir.
Aşağıdaki örnekte sizeof
işlecinin kullanımı gösterilmektedir:
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)}");
}
}
sizeof
işleci, yönetilen bellekteki ortak dil çalışma zamanı tarafından ayrılan bayt sayısını döndürür.
yapı türleri için, yukarıdaki örnekte gösterildiği gibi bu değer herhangi bir doldurma içerir.
sizeof
işlecinin sonucu, yönetilmeyen bellekte türün boyutunu döndüren Marshal.SizeOf yönteminin sonucundan farklı olabilir.
Güvenli olmayan kodda, bağımsız değişken yönetilen bir tür olduğunda, sizeof
işleci bu türdeki bir örnek için ayrılan bayt sayısını değil başvurunun boyutunu döndürür.
Önemli
sizeof
tarafından döndürülen değer, yönetilmeyen bellekteki türün boyutunu döndüren Marshal.SizeOf(Object)sonucundan farklı olabilir.
C# dil belirtimi
Daha fazla bilgi için, C# dil belirtimininboyut işleci bölümüne bakın.