Раздел не создан в выпуске программы C ++ - PullRequest
0 голосов
/ 19 апреля 2019

Я храню некоторые переменные внутри пользовательского раздела в моей программе.Во время сеанса отладки я могу проверить, что он создан и содержит ли он необходимые данные.Но в режиме релиза он исчезает!

Примечание: я также создаю исполняемый раздел, который странным образом создается в обеих версиях.Платформа ЦП, кажется, не имеет значения.

Почему сегмент «данных» не появляется в версии выпуска?

Это короткий снимок:

// Defnitions used for better code segmentation
#define store_variable(x) __declspec(allocate(x))  //for data segment
#define store_code(seg) __declspec(code_seg(seg))  //for execution segment


#pragma section(".eqwrt", read)     //weird name because I thought there would be collision
store_variable(".eqwrt") UCHAR  USER_DATA[SIZE];
store_variable(".eqwrt") USHORT Version = 1;

store_code(".wsect") bool sendError();

Программа (это dll) скомпилирована с фиксированным базовым адресом и флагом / MT.

Выпуск версии x64.Появляется только один сегмент - исполняемый: Release version x64. Only one segment appears-the executable one

Отладочная версия x64.Оба сегмента отображаются: Debug version x64. Both segments show up

1 Ответ

1 голос
/ 19 апреля 2019

Попробуйте отключить схему Link-time optimizatizon в настройках проекта.Для этого перейдите по адресу: Configuration Properties ? General ? Whole Program Optimisation и установите значение No Whole Program Optimisation.

Скорее всего, это связано с оптимизацией, выполненной во время компоновки.Более подробную информацию вы можете получить здесь: Что такое оптимизация на C ++ и оптимизация всей программы в visual studio

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