如何防止功能被优化
Posted
技术标签:
【中文标题】如何防止功能被优化【英文标题】:How to prevent a function from being optimized 【发布时间】:2009-09-29 17:28:42 【问题描述】:我正在优化整个代码,但我不希望某个函数被优化,比如出于调试目的。有没有办法在 gcc 3.4+ 编译器上做到这一点?
【问题讨论】:
【参考方案1】:最简单的方法,将函数放在它自己的编译单元中,编译那个没有优化标志的函数。
最近的 gcc 版本(我认为是 4.4+)有一个属性来控制每个函数的优化,使用
__attribute__((optimize(0)))
关于禁用优化的功能
【讨论】:
编译器通常不保证二进制文件的调试/发布版本具有相同的 ABI 或填充等....因此(在一般情况下)不安全假设这会起作用(尽管它可能适用于您的编译器)。 你有例子吗?我知道微软使用不同的 C 运行时来调试可执行文件,但跨模块函数调用和结构对齐互操作性得到保证。据我所知,gcc 在所有机制中生成 100% 兼容的输出。显然,结构对齐和 ABI 之类的东西超出了语言标准的范围,因此编译器在生成调试输出时没有必须尊重它们。但这让我觉得这是一个迂腐的观点,而不是一个实际的观点。 OP 询问了 gcc,而 gcc 没有像不同的“调试”和“发布”ABI 这样的废话。 这还能用吗?我的应用无法再使用它了。以上是关于如何防止功能被优化的主要内容,如果未能解决你的问题,请参考以下文章
C++ volatile关键字(多线程中声明为易变值不稳定值,告诉程序每次都从内存读取,不被编译优化,防止被优化后变量异常)