http://research.scee.net/files/presentations/gcapaustralia09/Pitfalls_of_Object_Oriented_Programming_GCAP_09.pdf

个人比较喜欢这篇文章的思考方向和一些想法。

首先作者给出了一些历史回顾,c++是如何发展的,硬件是如何发展的。

c++在发展和繁荣的阶段,刚好是硬件和应用程序非常适合c++的阶段,类似生产力和生产关系的适应,所以大家happy。

甚至衍生到OO programming,也是如此。

然后硬件的发展方向开始改变,processor的频率和多核的进展让处理能力大幅度增加,但是相应的memory这边的速度远远跟不上。

所以现在游戏开发中更多的时候bound在数据上,而不是计算上。cpu端和gpu端都有类似的趋势。

因此,对于速度的追求要求我们去优化内存的使用和访问,进而做DataOrientedDesign。

我觉得DataOrientedDesign和ObjectOrientedDesign没有太大冲突,一个从逻辑组织的角度出发,一个从hardware运行方式出发,在其中找到一个平衡点是我们需要做的事情。

这样可以在逻辑层面上仍然具有通过object oriented design来大幅度降低逻辑复杂度的优势,而且从hardware运行层面,还可以获得很好的数据访问能力。

而且现在很多引擎就是在走这个方向。

具体到细节上,文中讲的东西可以从阅读汇编代码和查看profiler工具来获得,因为不同的硬件情况的不同,需要具体情况具体分析了。

比如其中有说到branch的例子,做一个branch带来的分支预测和并行性的损失大于伪branch两边都算来的大,所以我们不能那么想当然的以为branch可以再任何情况下都会得到性能提升的。

还有就是用pool来集中数据,比如所有node的bounding box就可以放到pool里,然后pass这个pool就可以了,这块内存是连续的,所以cache性能可以达到最好。

还有prefetch等一些做法,教科书里面已经有了,就跳过吧。


总之,oo programming对于降低复杂度还是相当不错的。

但是也容易让人(因为犯懒)而忘记内部和底层的细节,导致性能上的降低。

合理做法是,写和维护的时候仍旧保持对内部细节和底层的良好理解和相应的算法,使用object的时候可以享受复杂度降低带来的好处。


最后一个有意思的是说,游戏开发么,最快的是design for specific而不是design for general。

这个赞同一半,两个都有好处,就是一个平衡吧。

Pitfall of OO Programming相关推荐

  1. 极限编程 Extreme Programming (中英文对照)图形解释

    极限编程 Extreme Programming 作者 不详 来源 审校 BigMac[AKA] 译者 march-bird lucian yjf taopin wl jazz韩伟 nullgate ...

  2. 重温“卡马克谈functional programming in c++”

    正在准备些关于overwatch的gameplay architecture的blog,里面的观点也让我想起12年时候看的carmack谈的functional programming in c++这 ...

  3. 计算机科学经典论文(zz)

    作者:g9yuayon from:http://blog.csdn.net/g9yuayon/article/details/1512851 从Jao的Programming Musing 看到的:B ...

  4. ASP.net:命名空间“System.Xml”中不存在类型(是缺少程序集引用吗?)

    在.net FrameWork3.5下建立了一个类,在迁移至.net FrameWork2.0下此类报如上错误,删除这两个命名空间后,运行同样正常,故查了一下这两个命名空间具体的用法. 在.net F ...

  5. OOP 概念的编程基础思想----我的感想

    OOP 概念的编程基础思想----我的感想 (The essential of OOP concept Thought) Actually the philosofy of object orient ...

  6. 欢迎大家加入我的Q群

    如果你对以下Q群感兴趣的话,欢迎加入! 1.编程算法群:32760081 主要研究编程艺术-算法,包括神经网络,人工智能的算法. 举例: 双向广度优先搜索法. 广度优先搜索遵循从初始结点开始一层层扩展 ...

  7. 个人网页、博客、课程--不断更新

    论文和相关代码 :https://paperswithcode.com/ Caiming Xiong http://www.stat.ucla.edu/~caiming/ 论文,代码,博客 肖小粤的啵 ...

  8. python量化分析岗位_量化金融有哪些职位可以选择?

    机会成本 之前写了自己如何从自动化领域转行到金融领域,后台很多朋友私信问自己的背景适不适合转行做量化,或者是如果想做量化需要做什么准备,虽然简单的回答了一些,但是由于平时工作和学习实在太忙,难免相对简 ...

  9. 【2013-10-3前】中国计算机学会推荐国际学术会议和期刊目录

    中国计算机学会推荐国际学术会议和期刊目录 参考文献:http://www.ccf.org.cn/sites/ccf/paiming.jsp(网站会更新) ----编辑于2012年,本文不做更新,具体看 ...

最新文章

  1. Intent Android 详解
  2. Elasticsearch 常见的 8 种错误及最佳实践
  3. Eclipse导入项目常见问题----乱码问题03
  4. map.get(key)空指针异常_NPE空指针异常总结
  5. “制造商和技术支持商”
  6. flyway配置mysql_Flyway快速上手教程
  7. WPF的悬停工具栏实现方案
  8. 需要c语言,需要C语言的需要什么工具软件
  9. 计算机网络技术实验,计算机网络技术实验一
  10. Robot Framework 的安装配置和简单的实例介绍
  11. 金万维异速联远程接入解决方案
  12. plsql使用方法(主要是sql语句)
  13. canvas圆形、半圆形进度条
  14. wps转word WPS表格如何实现冻结窗格呢
  15. MCE | “神药”二甲双胍后,糖尿病药物研究谁将是下一个顶流?
  16. android 工具 Draw 9-patch 详解
  17. 经济实验室帐号与国泰安数据库地址
  18. Camtasia实用技巧之时间轴
  19. 几十万换来的Ddos攻击防护经验分享(转载)
  20. alu和mdr位数相等吗_计算机组成原理复习

热门文章

  1. 关于 Win10 截图 截屏 原生截图工具 基础使用
  2. springboot实现数据库数据导出生成Excel报表
  3. 服务器ping值不稳定,服务器网络ping值过高的原因
  4. “滴滴出行” 成长路径分析(2016年01月19日)
  5. 心电图心电轴怎么计算_心电图QRS电轴角度简易直读法
  6. Power up! 这三个小时IBM都讲了些啥?
  7. 大数据助力运营商创新转型 中国信息通信大数据大会圆满召开
  8. anaconda3如何卸载干净
  9. python菜鸟教程 | print功能
  10. 37岁被裁,120天没找到工作,无奈去小公司,结果懵了