在使用内射函数索引数组时优化g ++

fai*_*dox 2 c++ compiler-construction optimization g++

我有一个for循环,每个步骤i,它处理一个数组元素p [f(i)],其中f(i)是从1 ... n到1的单射(一对一)映射... m(m> n).因此,循环中没有数据耦合,可以使用所有编译器优化技术,例如流水线.但是,如何告知g ++ f(i)的注入性?或者我甚至需要(g ++可以解决这个问题)?

Ada*_*eld 6

假设f不依赖于任何全局状态并且不产生副作用,您可以使用以下const属性标记它:

int f(int i) __attribute__((const));
Run Code Online (Sandbox Code Playgroud)

如果f确实依赖于全局状态但仍具有其输入和全局状态的纯函数(并且不产生副作用)的pure属性,则可以使用稍弱的属性.

这些属性让gcc进行了比其他方式更多的优化,尽管我不知道这些对你的情况是否有帮助.查看生成的汇编代码,看看它们是否有用.