【发布时间】:2012-10-10 13:51:56
【问题描述】:
假设您有一个 C/C++ 函数,它在第一次运行时会以某种方式运行。然后,所有其他时间它都以另一种方式表现(例如,见下文)。第一次运行后,if 语句变得多余,如果速度很重要,可以优化掉。有没有办法进行这种优化?
bool val = true;
void function1() {
if (val == true) {
// do something
val = false;
}
else {
// do other stuff, val is never set to true again
}
}
【问题讨论】:
-
这是在自修改代码领域。我怀疑你是否能够直接在 c 或 c++ 中完成
-
当然可以。 static local boolean 将告诉编译器您希望特定位运行一次且仅一次。
-
如果这是用于笔记本电脑/台式机 CPU,那么答案是“没关系,因为现在使用的任何 CPU 最多会错误预测少数跳跃,每次浪费约 1ns” .
-
@j_random_hacker 但是,有微控制器、IC、移动设备……即使是一个周期也可能不会好输。 µC 也往往没有分支预测
-
@hippietrail,Hotspot (JVM) 使用自修改代码作为规范,在 java7 中有 INVOKE_DYNAMIC,如果正确实施,它将执行 OP 想要的操作,它是语言的一部分(不是真正的 java,而是java字节码)。 Java 中的
static final倾向于转为常量然后常量折叠,代码需要一些额外的技巧但完全有可能导致代码没有负载val和后续分支。
标签: c++ c performance optimization