Dela via


sizeof-operator – bestämma minnesbehovet för en given typ

Operatorn sizeof returnerar antalet byte som används av en variabel av en viss typ. I säker kod måste argumentet till operatorn sizeof vara namnet på en inbyggd ohanterad typ.

C#-språkreferensen dokumenterar den senaste versionen av C#-språket. Den innehåller även inledande dokumentation för funktioner i offentliga förhandsversioner för den kommande språkversionen.

Dokumentationen identifierar alla funktioner som först introducerades i de tre senaste versionerna av språket eller i aktuella offentliga förhandsversioner.

Tips/Råd

Information om när en funktion först introducerades i C# finns i artikeln om språkversionshistoriken för C#.

Uttrycken som presenteras i följande tabell utvärderas vid kompileringstiden till motsvarande konstanta värden och kräver ingen osäker kontext:

Uttryck Konstant värde
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

Storleken på en inbyggd, ohanterad typ är en kompileringskonstant.

I osäker kod kan du använda sizeof följande:

  • En typparameter som är begränsad till en ohanterad typ returnerar storleken på den ohanterade typen vid körning.
  • En hanterad typ eller en pekartyp returnerar storleken på referensen eller pekaren, inte storleken på det objekt som den refererar till.

I följande exempel visas användningen av operatorn 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)}");
    }
}

Operatorn sizeof ger tillbaka antalet byte som allokerats av Common Language Runtime i hanterat minne. För struct- typer innehåller detta värde all utfyllnad, vilket visas i föregående exempel. Resultatet av sizeof-operatorn kan skilja sig från resultatet av Marshal.SizeOf-metoden, som returnerar storleken på en typ i ohanterat minne.

Viktig

Värdet som returneras av sizeof kan skilja sig från resultatet av Marshal.SizeOf(Object), som returnerar storleken på typen i ohanterat minne.

Språkspecifikation för C#

Mer information finns i Avsnittet storlek på operatorn i C#-språkspecifikationen.

Se även