IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

又一个有趣的面试题

酷壳 - CoolShell.cn 2011-04-02 13:46:33 累计浏览 4,436 次
本机暂存

大家还记得前些天的那个火柴棍式的面试题吗?很有趣吧。下面是我今天在StackExchange上看到的一个有趣的面试题。大家不妨一起来思考一下。问题如下――

有两个相同功能代码如下,请在在A,B,C是什么的情况下,请给出三个原因case 1比case 2快,还有三个原因case 2会比case 1要执行的快。(不考虑编译器优化)

case 1

for (i=0; i<N; ++i){
    A;
    B;
    C;
}

case 2

for (i=0; i<N; ++i){
    A;
}
for (i=0; i<N; ++i){
    B;
}
for (i=0; i<N; ++i){
    C;
}

我的第一个反应是――

  • case1 要快一些,因为只有一个i++的i<N的操作,而case 2却有三个,这在点上,case 1就比case 2要快。
  • case2如果要快的话,有一个原因是,A, B, C其中一个需要去先获得一个资源(比如一个锁),在case1下,每次都要去拿这个资源,而case2下,只需要拿一次然后。但这个可能是不对的,因为我无法想出一个相同的语句块放在case 1中会和放在case 2中有差别。(不过可能比较接近了)

继续思考:这个题有点像是“同步和异步”的问题,case 1是同步,case 2是异步,所以,异步快于同步,也许可以从这个方向出发,写出A, B, C的语句块。

不过,其要三个原因啊。各位,你们有想法吗

―-更新 1―-

刚才在twitter上与人讨论,发现又有一种情况,case 2要比case 1要快。比如,A, B, C分别访问是不同的内存块(数组),那么case 1就得在不同的内存块上来回切换寻址,而case2则可以连续地访问内存块。访问连续的内存效率要高。尤其是三块大内存。

―-更新 2―

正如本贴评论中所说的,CPU的cache也是其中一个因素。大家对底层知识了解的都很不错啊。赞一个。

同分类推荐文章

  1. 对基本有序的序列排序算法 (2026-06-11 17:46:49)
  2. Four Levels Of Customer Understanding (2026-05-22 21:00:00)
  3. 除法的意义 (2026-04-12 20:52:17)

查看更多 算法 文章 →

建议继续学习

  1. 如何成为Python高手 (累计阅读 54,992)
  2. Linux 性能监控、测试、优化工具 (累计阅读 13,010)
  3. include(“./file.php”)和include(“file.php”)区别 (累计阅读 12,788)
  4. Rolling cURL: PHP并发最佳实践 (累计阅读 11,486)
  5. 关于使用STL的红黑树map还是hashmap的问题 (累计阅读 8,871)
  6. jQuery性能优化指南 (累计阅读 8,819)
  7. 提升磁盘IO性能的几个技巧 (累计阅读 8,508)
  8. 关于PHP的编译和执行分离 (累计阅读 8,345)
  9. Mysql的随机读取 (累计阅读 7,861)
  10. redis 运维实际经验纪录之一 (累计阅读 7,711)