C ++ / CLI结构/类对齐

时间:2011-02-17 13:57:00

标签: memory c++-cli

似乎我无法使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;
}

1 个答案:

答案 0 :(得分:1)

您需要使用值类型来指定对齐方式。除此之外,我不确定这是衡量这一点的最佳方法。引用类型也有一些小的内置开销。请尝试使用值struct / value类。