Delen via


sizeof-operator - bepaal het geheugengebruik voor een gegeven type

De operator sizeof retourneert het aantal bytes dat wordt bezet door een variabele van een bepaald type. In veilige code moet het argument voor de sizeof operator de naam zijn van een ingebouwd , niet-beheerd type.

De expressies die in de volgende tabel worden weergegeven, worden tijdens het compileren geƫvalueerd op de bijbehorende constante waarden en vereisen geen onveilige context:

Uitdrukking Constante waarde
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

De grootte van een ingebouwd, onbeheerd type is een compilatieconstante.

In onveilige code kunt u als volgt gebruiken sizeof :

  • Een typeparameter die is beperkt tot een niet-beheerd type, retourneert de grootte van dat onbeheerde type tijdens runtime.
  • Een beheerd type of een aanwijzertype retourneert de grootte van de verwijzing of aanwijzer, niet de grootte van het object waarnaar wordt verwezen.

In het volgende voorbeeld ziet u het gebruik van de 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)}");
    }
}

De operator sizeof retourneert het aantal bytes dat is toegewezen door de algemene taalruntime in het beheerde geheugen. Voor struct typen bevat die waarde enige opvulling, zoals het voorgaande voorbeeld aantoont. Het resultaat van de sizeof-operator kan verschillen van het resultaat van de Marshal.SizeOf methode, die de grootte van een type in onbeheerde geheugen retourneert.

Belangrijk

De waarde die door sizeof wordt geretourneerd, kan verschillen van het resultaat van Marshal.SizeOf(Object), wat de grootte van het type in onbeheerd geheugen retourneert.

C#-taalspecificatie

Zie De grootte van de operator sectie van de C#-taalspecificatievoor meer informatie.

Zie ook