>和> =在汇编级别

时间:2011-08-30 05:14:04

标签: c assembly

我有两个time_t个变量,分别是start_sec和end_sec。现在,我要执行数百万次操作,以确定给定的随机time_t是否属于此范围。

if(given_sec >= start_sec && given_sec <= end_sec) {
    /* given_sec falls in the interval*/
}

start_sec -= -1; //keep it for million comparisons
end_sec += 1; //keep it for million comparisons

if(given_sec > start_sec && given_sec < end_sec) {
    /* given_sec falls in the interval*/
}

哪一个更好?

我猜在装配级别je loc; jle loc; jg loc; jge loc用于跳转。我想知道jg loc; jl loc是否可以节省任何CPU周期。

2 个答案:

答案 0 :(得分:6)

不,他们不保存任何东西,如果他们是,优化者无论如何都会帮助你。

答案 1 :(得分:0)

微观层面过早优化的一个完美示例,担心单个CPU周期,不会给你任何东西,但会混淆你的代码 - start_secend_sec不再包含名称的值建议。你甚至错误地优化了它:

start_sec -= -1; //keep it for million comparisons

这将添加一个到start_sec

数百万time_t值来自何处?输入文件?一个数据库?从系统时钟?随机发电机?这些来源中的每一个都将比比较慢。即使&lt;和&gt;某些CPU周期比&lt; =和&gt; =(对于给定特定CPU上的给定指令集)更快,并且分析显示此循环实际上是您的瓶颈,这种“优化”不太可能解决此问题。特别是对于具有每秒数十亿周期的现代GHz CPU的几百万次比较。