繁体   English   中英

>和> =在组装级别

[英]> and >= at Assembly level

我有两个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 je loc; jle loc; jg loc; jge loc je loc; jle loc; jg loc; jge loc用于跳转。 我想知道jg loc; jl loc jg loc; jl loc保存所有CPU周期。

不,他们什么也不会保存,如果可以,优化程序无论如何都会为您提供帮助。

在微观层面上过早的优化,担心单CPU周期,该给你什么,但混淆代码的一个很好的例子- start_secend_sec不再包含名称所暗示的值。 而且您甚至对其进行了优化:

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

这将为start_sec 添加一个。

数百万个time_t值从何而来? 输入文件? 数据库? 从系统时钟开始? 随机生成器? 这些来源中的每一个都会比比较慢。 因此,即使<和>比<=和> =快一些CPU周期(对于给定特定CPU上的给定指令集),并且分析显示此循环实际上是您的瓶颈,这种“优化”不太可能解决这个问题。 特别是对于每秒数十亿次循环的现代GHz CPU仅进行几百万次比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM