Marshal.SizeOf 方法

定义

返回类的非托管大小(以字节为单位)。

重载

SizeOf(Object)
已过时.

返回对象的非托管大小(以字节为单位)。

SizeOf(Type)
已过时.

返回非托管类型的大小(以字节为单位)。

SizeOf<T>()

返回非托管类型的大小(以字节为单位)。

SizeOf<T>(T)

返回指定类型的对象的非托管大小(以字节为单位)。

SizeOf(Object)

Source:
Marshal.cs
Source:
Marshal.cs
Source:
Marshal.cs

注意

SizeOf(Object) may be unavailable in future releases. Instead, use SizeOf<T>(). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296514

返回对象的非托管大小(以字节为单位)。

public:
 static int SizeOf(System::Object ^ structure);
[System.Obsolete("SizeOf(Object) may be unavailable in future releases. Instead, use SizeOf<T>(). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296514")]
public static int SizeOf (object structure);
public static int SizeOf (object structure);
[System.Runtime.InteropServices.ComVisible(true)]
public static int SizeOf (object structure);
[<System.Obsolete("SizeOf(Object) may be unavailable in future releases. Instead, use SizeOf<T>(). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296514")>]
static member SizeOf : obj -> int
static member SizeOf : obj -> int
[<System.Runtime.InteropServices.ComVisible(true)>]
static member SizeOf : obj -> int
Public Shared Function SizeOf (structure As Object) As Integer

参数

structure
Object

要返回其大小的对象。

返回

非托管代码中指定对象的大小。

属性

例外

structure 参数为 null

示例

以下示例创建一个托管结构,将其传输到非托管内存,然后将其传输回托管内存。 此示例使用 SizeOf 方法确定要分配的非托管内存量。

using System;
using System.Runtime.InteropServices;

public struct Point
{
    public int x;
    public int y;
}

class Example
{

    static void Main()
    {

        // Create a point struct.
        Point p;
        p.x = 1;
        p.y = 1;

        Console.WriteLine("The value of first point is " + p.x + " and " + p.y + ".");

        // Initialize unmanged memory to hold the struct.
        IntPtr pnt = Marshal.AllocHGlobal(Marshal.SizeOf(p));

        try
        {

            // Copy the struct to unmanaged memory.
            Marshal.StructureToPtr(p, pnt, false);

            // Create another point.
            Point anotherP;

            // Set this Point to the value of the
            // Point in unmanaged memory.
            anotherP = (Point)Marshal.PtrToStructure(pnt, typeof(Point));

            Console.WriteLine("The value of new point is " + anotherP.x + " and " + anotherP.y + ".");
        }
        finally
        {
            // Free the unmanaged memory.
            Marshal.FreeHGlobal(pnt);
        }
    }
}
Imports System.Runtime.InteropServices



Public Structure Point
    Public x As Integer
    Public y As Integer
End Structure


Module Example


    Sub Main()

        ' Create a point struct.
        Dim p As Point
        p.x = 1
        p.y = 1

        Console.WriteLine("The value of first point is " + p.x.ToString + " and " + p.y.ToString + ".")

        ' Initialize unmanged memory to hold the struct.
        Dim pnt As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(p))

        Try

            ' Copy the struct to unmanaged memory.
            Marshal.StructureToPtr(p, pnt, False)

            ' Create another point.
            Dim anotherP As Point

            ' Set this Point to the value of the 
            ' Point in unmanaged memory. 
            anotherP = CType(Marshal.PtrToStructure(pnt, GetType(Point)), Point)

            Console.WriteLine("The value of new point is " + anotherP.x.ToString + " and " + anotherP.y.ToString + ".")

        Finally
            ' Free the unmanaged memory.
            Marshal.FreeHGlobal(pnt)
        End Try

    End Sub
End Module

注解

此方法接受 结构的实例,该实例可以是引用类型或装箱值类型。 布局必须是连续的或显式的。

返回的大小是非托管对象的大小。 对象的非托管大小和托管大小可能不同。 对于字符类型,大小受 CharSet 应用于该类的值的影响。

可以使用 SizeOf 方法确定使用 AllocHGlobalAllocCoTaskMem 方法分配的非托管内存量。

另请参阅

适用于

SizeOf(Type)

Source:
Marshal.cs
Source:
Marshal.cs
Source:
Marshal.cs

注意

SizeOf(Type) may be unavailable in future releases. Instead, use SizeOf<T>(). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296515

返回非托管类型的大小(以字节为单位)。

public:
 static int SizeOf(Type ^ t);
[System.Obsolete("SizeOf(Type) may be unavailable in future releases. Instead, use SizeOf<T>(). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296515")]
public static int SizeOf (Type t);
public static int SizeOf (Type t);
[<System.Obsolete("SizeOf(Type) may be unavailable in future releases. Instead, use SizeOf<T>(). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296515")>]
static member SizeOf : Type -> int
static member SizeOf : Type -> int
Public Shared Function SizeOf (t As Type) As Integer

参数

t
Type

要返回其大小的类型。

返回

非托管代码中指定类型的大小。

属性

例外

t 参数是泛型类型定义。

t 参数为 null

示例

下面的示例演示如何调用 SizeOf 方法。 此代码示例是为 Marshal 类提供的一个更大示例的一部分。

// Demonstrate the use of the SizeOf method of the Marshal
// class.
Console::WriteLine("Number of bytes needed by a Point object: {0}",
    Marshal::SizeOf(Point::typeid));
Point point;
Console::WriteLine("Number of bytes needed by a Point object: {0}",
    Marshal::SizeOf(point));
// Demonstrate the use of the SizeOf method of the Marshal class.
Console.WriteLine("Number of bytes needed by a Point object: {0}",
    Marshal.SizeOf(typeof(Point)));
Point p = new Point();
Console.WriteLine("Number of bytes needed by a Point object: {0}",
    Marshal.SizeOf(p));
' Demonstrate the use of the SizeOf method of the Marshal class.
Console.WriteLine("Number of bytes needed by a Point object: {0}", Marshal.SizeOf(GetType(Point)))
Dim p As New Point()
Console.WriteLine("Number of bytes needed by a Point object: {0}", Marshal.SizeOf(p))

注解

如果没有 结构,可以使用此方法。 布局必须是连续的或显式的。

返回的大小是非托管类型的大小。 对象的非托管大小和托管大小可能不同。 对于字符类型,大小受 CharSet 应用于该类的值的影响。

另请参阅

适用于

SizeOf<T>()

Source:
Marshal.cs
Source:
Marshal.cs
Source:
Marshal.cs

返回非托管类型的大小(以字节为单位)。

public:
generic <typename T>
 static int SizeOf();
public static int SizeOf<T> ();
static member SizeOf : unit -> int
Public Shared Function SizeOf(Of T) () As Integer

类型参数

T

要返回其大小的类型。

返回

T 泛型类型参数指定的类型的大小(以字节为单位)。

注解

如果没有 结构,可以使用此方法。 布局必须是连续的或显式的。

返回的大小是非托管类型的大小。 对象的非托管大小和托管大小可能不同。 对于字符类型,大小受 CharSet 应用于该类的值的影响。

适用于

SizeOf<T>(T)

Source:
Marshal.cs
Source:
Marshal.cs
Source:
Marshal.cs

返回指定类型的对象的非托管大小(以字节为单位)。

public:
generic <typename T>
 static int SizeOf(T structure);
public static int SizeOf<T> (T structure);
static member SizeOf : 'T -> int
Public Shared Function SizeOf(Of T) (structure As T) As Integer

类型参数

T

structure 参数的类型。

参数

structure
T

要返回其大小的对象。

返回

非托管代码中指定对象的大小(以字节为单位)。

例外

structure 参数为 null

注解

此方法接受 结构的实例,该实例可以是引用类型或装箱值类型。 布局必须是连续的或显式的。

返回的大小是非托管对象的大小。 对象的非托管大小和托管大小可能不同。 对于字符类型,大小受 CharSet 应用于该类的值的影响。

可以使用 SizeOf<T>(T) 方法确定使用 AllocHGlobalAllocCoTaskMem 方法分配的非托管内存量。

适用于