我遇到了一个问题,优化器似乎删除了非常必要的代码行。一些背景:我有一个与PCIe驱动程序交互的程序。我有一个整数指针UINT32 *bar_reg;
,它指向我正在通信的BAR寄存器的用户空间地址。要写入寄存器,我只需解引用指针。*(bar_reg + OFFSET) = value;
在没有任何优化的情况下,这个方法可以正常工作。但是一旦我打开任何级别的优化,所有解引用指针的行都会被删除。我最终是通过在Visual Studio中逐步执行才发现了这个问题,然而不受平台影响。直到现在我一直在关闭优化器的情况下使用这个程序,但是在Linux中使用我的库代码的某个人想要打开优化器。因此,我想知道为什么会出现这个问题,以及最合理的修复/解决方法是什么。