前端之家收集整理的这篇文章主要介绍了
什么时候可以通过编译器完成的优化摧毁我的C代码?,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
编译器完成的优化何时可以使我的C
代码出现
错误的行为,如果没有执行那些优化,这些行为将不存在?例如,在某些情况下不使用volatile可能导致程序的行为不正确(例如,不从存储器重新读取变量的值,而只读取一次并将其存储在寄存器中).但是,在开启最具侵略性的优化标志之前,还有哪些应该知道的陷阱,然后想知道为什么程序不再工作?
编译器优化不应影响程序的可观察行为,所以在理论上你不用担心.在实践中,如果您的程序陷入未定义的行为,任何事情都可能已经发生,所以如果您的程序在启用优化时中断,那么您只是暴露了现有的
错误 – 这并不是破坏它的优化.
一个常见的优化点是返回值优化(RVO)和命名返回值优化(NRVO),其基本上意味着从正在接收它们的对象直接构造的函数中的值返回的对象,而不是复制.这调整构造函数,复制构造函数和析构函数调用的顺序和数量 – 但通常使用这些函数正确写入,行为上仍然没有可观察到的差异.
原文链接:https://www.f2er.com/c/112263.html