2011-02-17 106 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