优化编译器消除错误

问题描述 投票:0回答:2

因此,很多人在堆栈溢出上发布了有关编译器优化如何将错误引入其程序的文章。但是,我遇到了相反的问题。我正在编写一个 C++ 程序,并且有一个似乎未定义行为的错误,只有当我将 XCode 的编译器设置为关闭(无[-O0])时才会出现。如果我将其设置为“最快、积极的优化[-Ofast]”,那么该错误就会消失。

所以我想知道是否有人有任何优化消除错误的经验(而不是更常见的优化引入错误的情况)。造成这种情况的常见原因有哪些?我有点不知道该做什么或去哪里检查。

c++ xcode debugging optimization
2个回答
1
投票

优化可以更改表达式的求值顺序,因此,如果您的错误是例如以下内容中

foo()
bar()
的指定求值顺序的结果:

 some_function(foo(), bar());

然后不同的优化设置将暴露错误,而其他优化设置将隐藏它。

还有很多其他的可能性。


0
投票

启用优化可能会导致释放的堆栈/堆内存比调试版本在更长的时间内包含有效数据。一些编译器甚至在调试版本中清理释放的堆栈/堆内存,这意味着释放的数据立即无效。

© www.soinside.com 2019 - 2024. All rights reserved.