c++ - 使用单射函数索引数组时优化 g++

标签 c++ optimization compiler-construction g++

我有一个 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/

相关文章:

c++ - Visual C++ 2012 中的编译器错误? (乱七八糟的跳转地址)

c++ - 如何通用地编写隐藏结构的属性? (C++ 的设计/实现)

sql - 如何优化 Oracle SQL 中列名作为函数参数出现的查询?

c - 如何将 C 代码编译为原始的无操作系统二进制文件?

algorithm - 如何在 O(n log n) 时间内找到从数组中每个位置开始的最长递增序列,

python - 多元标量函数的梯度下降优化

eclipse - Unresolved inclusion : <iostream> in eclipse on mac

c++ - 是否有像 Dependency Walker 这样可以在 Windows CE 6.5 移动设备上运行的工具?

c++ - 需要类型名错误(模板相关错误)

c++ - 对数深度缓冲区 OpenGL