2009-09-29 74 views

回答

12

最简单的方法,将函数放在自己的编译单元中,编译没有优化标志的函数。

最新版本的GCC(4.4或以上版本我认为)要控制每个功能优化的属性,使用

__attribute__((optimize(0))) 

的功能禁用优化

+1

编译器通常__do not__出示担保的是调试/发行版本二进制文件具有相同的ABI或填充等等。因此,假设这会起作用(尽管它可能适用于您的编译器)并不安全(通常情况下)。 – 2009-09-29 17:48:26

+2

你有没有例子?我知道microsoft使用不同的C运行库来执行调试可执行文件,但是保证了跨模块函数调用和结构对齐的互操作性。就我所知,gcc在所有制度中都会产生100%兼容的输出。 很显然,像结构对齐和ABIs之类的东西超出了语言标准领域,所以编译器在生成调试输出时不会*承认它们。但这让我觉得更像一个迂腐点,而不是一个实用的点。 – 2009-09-29 19:03:27

+0

OP询问gcc和gcc没有像不同的“调试”和“发布”ABI一样的废话。 – 2011-05-19 15:07:28