我有一个昂贵的函数被多次调用,并且参数的可能值非常有限.
函数返回代码仅依赖于参数,因此加快速度的明显方法是在函数中保留静态缓存以获取可能的参数和相应的返回代码,因此对于参数的每个组合,代价高昂的操作只执行一次.
我总是在这种情况下使用这种方法并且它工作正常但我刚刚想到GCC功能属性const
或者pure
可能对我有帮助.
有没有人有这方面的经验?GCC如何使用pure
和const
属性 - 仅在编译时或运行时?
我可以依靠GCC足够聪明地调用一个函数,声明为
int foo(int) __attribute__ ((pure))
对于相同的参数值只有一次,或者没有任何保证,我最好坚持使用缓存方法?
编辑:我的问题不是关于缓存/ memoization /查找表,而是GCC函数属性.
我认为你把GCC的纯属性与memoization混淆了.
GCC纯属性允许编译器减少在某些情况下调用函数的次数(例如循环展开).但是,只有在认为合适的情况下,它才能保证它会这样做.
你似乎在寻找的是你的功能的记忆.记忆是一种优化,不应重复相同输入的计算.而是应该返回先前的结果.GCC纯属性不会使函数以这种方式工作.你必须亲自实现这一点.