未在程序发布版本C ++中创建的部分

时间:2019-04-18 22:36:46

标签: c++ dll

我在程序的自定义部分中存储了一些变量。在调试会话期间,我可以检查它是否已创建并且其中包含必要的数据。但是在释放模式下,它消失了!

注意:我还创建了一个可执行节,奇怪地在两个版本中都创建了该节。 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标志进行编译。

发布x64版本。仅显示一个段-可执行段: Release version x64. Only one segment appears-the executable one

调试版本x64。这两个细分均显示: Debug version x64. Both segments show up

1 个答案:

答案 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