似乎我无法使C ++ / CLI结构与少于8个字节对齐。我有一个两个Int32的结构,分配一百万个,并根据“.NET Memory Profiler”(加上列表数据)分配16 MB内存。我将编译器选项设置为/ Zp4(也尝试/ Zp1),最小化大小(/ O1)和小代码(/ Os),只是为了确保,我还在我的代码中添加了“#pragma pack(1)” ,无济于事。我的结构仍然占用16个字节。我把它改成了课,仍然是一样的。
为什么? 如何改变?
侨, 埃克
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;
}
答案 0 :(得分:1)
您需要使用值类型来指定对齐方式。除此之外,我不确定这是衡量这一点的最佳方法。引用类型也有一些小的内置开销。请尝试使用值struct / value类。