我在程序的自定义部分中存储了一些变量。在调试会话期间,我可以检查它是否已创建并且其中包含必要的数据。但是在释放模式下,它消失了!
注意:我还创建了一个可执行节,奇怪地在两个版本中都创建了该节。 CPU平台似乎没什么区别。
为什么“数据”段没有出现在发行版中?
这是一个简短的快照:
// 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标志进行编译。
答案 0 :(得分:1)
尝试从项目设置中禁用Link-time optimizatizon
方案。
为此,请转到:Configuration Properties
General
Whole Program Optimisation
并设置为No Whole Program Optimisation
。
最有可能与链接期间执行的优化有关。 您可以从这里获得更多详细信息:What's C++ optimization & Whole program optimization in visual studio