2011-02-17 107 views
0

看來我不能使C++/CLI結構與少於8個字節對齊。我有一個兩個Int32的結構,分配一百萬個,根據「.NET Memory Profiler」(加上列表數據)分配16 MB內存。我將編譯器選項設置爲/ Zp4(也試過/ Zp1),以最小化大小(/ O1)和小代碼(/ O),只是爲了確保我另外在代碼中放了一個「#pragma pack(1)」 ,無濟於事。我的結構仍然佔用16字節。我改成了課堂,依然如此。C++/CLI結構/類對齊

爲什麼? 如何更改?

的Ciao, 埃克

using namespace System; 
#pragma pack(1) 

ref struct myStruct 
{ 
    Int32 a; 
    Int32 b; 
}; 

int main(array<System::String ^> ^args) 
{ 
    System::Collections::Generic::List<myStruct^> list; 
    for (int i = 0; i < 1000000; i++) 
    { 
     list.Add(gcnew myStruct()); 
    } 
    // avoid optimization 
    Console::WriteLine(list[333333]->a); 
    return 0; 
} 

回答

1

您需要使用值類型,以便能夠指定對齊。除此之外,我不確定這是衡量這一點的最佳方式。引用類型也有一些內置的開銷。改爲嘗試值結構/值類。

+0

我會很高興有更好的方法來衡量內存使用情況。 C++ sizeof()和Interop :: Marshal :: Sizeof()都不適用於引用。 – Eike 2011-02-17 14:15:12