2010-03-10 32 views
6

Marshal.SizeOf().的定義如下:The size returned is the size of the unmanaged object. The unmanaged and managed sizes of an object can differ.這是否意味着Marshal.SizeOf會返回您的定義大小,但不會返回實際的memeory分配的大小,因爲可能有一些用於對齊的填充?C#非託管對象的大小是多少?

例如:

struct MyStruct 
{ 
    char c; 
} 

大小將是非託管對象(非託管尺寸)1個字節,如果我使用Marshal.SizeOf()也可以是用於被管理對象(管理的大小)2或4個字節,如果我使用sizeof() 。我對嗎?

回答

1

只寫一個小例子的應用程序。
您的示例中的MyStruct在託管和非託管情況下大小爲1。
更復雜的對象的實際大小還可能取決於對齊和其他操作系統相關事物。

2

Marshal.SizeOf的唯一含義是Marshal.StructureToPtr方法所需的非託管內存塊的大小。 SizeOf可能不等於託管結構大小,也可能不等於非託管結構大小。 StructureToPtr可以使用或不使用填充序列化結構,它是內部細節。 SizeOf只報告此操作需要多少內存,以及其他任何內容。