我有一个问题,优化器似乎是删除非常必要的代码行。一些背景:我有一个连接PCIe驱动程序的程序。我有一个整数指针UINT32 *bar_reg;
,它指向我要通信的BAR寄存器的用户空间地址。要写入寄存器,我只需取消引用指针。 *(bar_reg + OFFSET) = value;
优化器删除指针去参考线
没有优化,这工作正常。然而,只要我打开任何级别的优化,所有取消引用指针的行都会被删除。我终于发现这一点的方式是通过在Visual Studio中加入。然而,它独立于平台而发生。到目前为止,我已经能够关闭优化器,但是在Linux中使用我的库代码的人现在想要打开优化。所以我很好奇为什么会出现这个问题,以及最合理的解决方法/解决方法是什么。
优化的代码行为不同通常是由于未定义的行为。 – 2014-11-23 03:28:38