是否可以关闭特定函数的优化?我的一个朋友有一个问题,那就是gcc的优化使得一些(我不知道的)µ控制器代码不能工作。我们知道它是哪些函数,但我们对代码本身一无所知,因此最简单、最安全的方法可能就是为整个函数关闭它。
遗憾的是,http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html显示有一个优化函数属性/杂注,但它需要我们没有的gcc 4.4。
提前感谢
发布于 2008-12-27 16:53:40
如果杂注对您无效,请尝试将函数拆分到自己的文件中,然后在不设置优化标志的情况下编译该文件。
发布于 2008-12-27 16:56:11
您可以将函数放在一个单独的文件中,然后编译该文件而不进行优化,但更好的解决方案是找出代码的问题所在并修复它。
在使用gcc启用优化时,出现的一个最常见的错误是具有严格的别名。确保启用了所有警告,并查看是否收到任何警告,这些警告可能会帮助您找出问题所在。如果你不能解决它,试着把这个问题简化成一个小的,完整的程序,并把它贴在这里。
发布于 2008-12-28 07:24:22
除了将函数放在自己的文件中之外,我认为没有任何方法可以使用早期版本的GCC逐个函数级别关闭对函数的优化。但是,您可以尝试在整个程序中选择关闭某些类型的优化,而不是关闭这一个函数的优化。虽然您已经在此特定函数中发现了一个bug,但这可能表明存在其他未发现的bug。
正如其他人指出的,罪魁祸首很可能是关于'strict aliasing'的优化。虽然从长远来看,你可能应该修复有问题的代码,但在短期内,你可以尝试在命令行中添加'-fno-strict-aliasing‘。在-O2及更高版本中,编译器会对指针之间的交互做出某些假设。添加此选项将告诉它不要做出这些假设。
如果此操作失败,并且由于某种原因无法修复代码,则可以尝试禁用其他optimization options。
https://stackoverflow.com/questions/395145
复制相似问题