2013-11-20 28 views
2

首先,我問了一個關於課堂大小的問題,我得到了答案,我也明白這一點。 現在當我看到WinDbg顯示同樣大小的012d時,我感到困惑,因爲我讀過結構不包含SyncBlock,那麼結構的大小應該比類的大小少8個字節。爲什麼WinDbg爲c#類和結構顯示相同的大小?

我的第一個問題:

它是正確的,結構沒有SyncBlock場?

所以,以下是我的課:

public class MyClass 
{ 
public int Age { get; set; } 
public double Amount { get; set; } 
public string Name { get; set; } 
} 

和結構是:

public struct MyStruct 
{ 
public int Age { get; set; }    
public double Amount { get; set; }     
public string Name { get; set; } 
} 

使用WinDbg我得到的size = 40兩個MyClass的和MYSTRUCT。

對於類我理解它,因爲它具有:

SyncBlock = 8 bytes 
TypeHandle = 8 bytes 
String ref = 8 bytes 
Int32  = 4 bytes 
Double  = 8 bytes 
Total  = 36 bytes 

,並因爲它需要挑選8字節boundry變成40個字節,但爲什麼是40個字節的結構也?

我在64位系統上運行。 以下是輸出從WinDbg的: enter image description here enter image description here

+0

預期的結果這是如何比你的其他問題不同昨天發佈? http://stackoverflow.com/questions/20084232/how-to-determine-size-of-an-object-c – paqogomez

+0

@paqogomez我沒有結構在我的最後一個問題。 – Kush

+0

當然,但你爲什麼認爲他們必須是不同的尺寸? –

回答

2

好了,我跑了下面的代碼:

[TestMethod] 
public void TestSize() 
{ 
    MyStruct s = new MyStruct(); 
    Debug.Print(Marshal.SizeOf(s).ToString()); 
} 

而且得到了24

+0

因爲我是初學者,也許我沒有得到它,但正如你看到我已經從WinDbg附加的截圖顯示大小= 40字節,不知道從哪裏來的? – Kush

+0

也許WinDbg正在裝載'struct',誰知道? –

相關問題