C ++ / CLI структура / выравнивание классов - PullRequest
0 голосов
/ 17 февраля 2011

Кажется, я не могу выровнять структуры C ++ / CLI менее чем с 8 байтами. У меня есть структура из двух Int32, я выделил миллион из них и вуаля: 16 МБ памяти согласно «.NET Memory Profiler» (плюс список данных). Я установил опцию компилятора на / Zp4 (также пробовал / Zp1), на Минимизировать размер (/ O1) и Малый код (/ Os), просто чтобы убедиться, что я дополнительно добавил "#pragma pack (1)" в свой код , но безрезультатно. Моя структура все еще занимает 16 байтов. Я изменил его на класс, все тот же.

Почему это? Как поменять?

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 Ответ

1 голос
/ 17 февраля 2011

Вам нужно использовать типы значений, чтобы иметь возможность указать выравнивание.Кроме того, я не уверен, что это лучший способ измерить это.У ссылочных типов также есть небольшие встроенные накладные расходы.Вместо этого попробуйте значение struct / value class.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...