我有两个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周期。
答案 0 :(得分:6)
不,他们不保存任何东西,如果他们是,优化者无论如何都会帮助你。
答案 1 :(得分:0)
微观层面过早优化的一个完美示例,担心单个CPU周期,不会给你任何东西,但会混淆你的代码 - start_sec
和end_sec
不再包含名称的值建议。你甚至错误地优化了它:
start_sec -= -1; //keep it for million comparisons
这将添加一个到start_sec
。
数百万time_t
值来自何处?输入文件?一个数据库?从系统时钟?随机发电机?这些来源中的每一个都将比比较慢。即使&lt;和&gt;某些CPU周期比&lt; =和&gt; =(对于给定特定CPU上的给定指令集)更快,并且分析显示此循环实际上是您的瓶颈,这种“优化”不太可能解决此问题。特别是对于具有每秒数十亿周期的现代GHz CPU的几百万次比较。