什么时候可以通过编译器完成的优化摧毁我的C代码?
发布时间:2020-12-16 03:12:13 所属栏目:百科 来源:网络整理
导读:编译器完成的优化何时可以使我的C代码出现错误的行为,如果没有执行那些优化,这些行为将不存在?例如,在某些情况下不使用volatile可能导致程序的行为不正确(例如,不从存储器重新读取变量的值,而只读取一次并将其存储在寄存器中).但是,在开启最具侵略性的优化
编译器完成的优化何时可以使我的C代码出现错误的行为,如果没有执行那些优化,这些行为将不存在?例如,在某些情况下不使用volatile可能导致程序的行为不正确(例如,不从存储器重新读取变量的值,而只读取一次并将其存储在寄存器中).但是,在开启最具侵略性的优化标志之前,还有哪些应该知道的陷阱,然后想知道为什么程序不再工作?
解决方法
编译器优化不应影响程序的可观察行为,所以在理论上你不用担心.在实践中,如果您的程序陷入未定义的行为,任何事情都可能已经发生,所以如果您的程序在启用优化时中断,那么您只是暴露了现有的错误 – 这并不是破坏它的优化.
一个常见的优化点是返回值优化(RVO)和命名返回值优化(NRVO),其基本上意味着从正在接收它们的对象直接构造的函数中的值返回的对象,而不是复制.这调整构造函数,复制构造函数和析构函数调用的顺序和数量 – 但通常使用这些函数正确写入,行为上仍然没有可观察到的差异. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |