我有一个 for 循环,其中每个步骤 i 处理一个数组元素 p[f(i)],其中 f(i) 是从 1...n 到 1 的单射(一对一)映射...米(米> n)。因此循环中没有数据耦合,并且可以使用所有编译器优化技术(例如流水线)。但是我如何告知 g++ f(i) 的单射性呢?或者我是否需要(g++ 可以解决这个问题)?
最佳答案
假设 f
不依赖于任何全局状态并且不会产生副作用,您可以使用 const
attribute 对其进行标记:
int f(int i) __attribute__((const));
如果 f
确实依赖于全局状态,但仍然具有其输入和全局状态的纯函数的属性(并且不会产生副作用),则可以使用稍弱的 pure
attribute 。
这些属性让 gcc 可以进行更多的优化,尽管我不知道这些属性对您的情况是否有帮助。查看生成的汇编代码,看看它们是否有帮助。
关于c++ - 使用单射函数索引数组时优化 g++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3937806/