Ale*_*ook 5 c++ optimization pointers
我有一个问题,优化器似乎正在删除非常必要的代码行.一些背景:我有一个连接PCIe驱动程序的程序.我有一个整数指针UINT32 *bar_reg;,指向我正在与之通信的BAR寄存器的用户空间地址.要写入寄存器,我只需要取消引用指针.*(bar_reg + OFFSET) = value;
没有优化,这很好.但是,只要我打开任何级别的优化,就会删除所有取消引用指针的行.我最终发现这一点的方法是在Visual Studio中逐步完成.然而,它发生独立于平台.到目前为止,我已经能够关闭优化器,但是在Linux中使用我的库代码的人现在想要启用优化.所以我很好奇为什么会出现这个问题以及最合理的修复/解决方法是什么.
使用volatile关键字以防止优化该变量.
例如:
volatile UINT32 *bar_reg;
Run Code Online (Sandbox Code Playgroud)
这里的问题是编译器假定由于程序不访问内存,这意味着内存将保持不变,因此它可能会尝试优化对该内存的一些写入.