当前硬件体系结构上, 无疑是有一定误导性的
各种所谓的O(n)算法, 都是"brach heavy"的, 会引起非常多的"cache miss"
举个例子, 在某些情况下, 二分查找还不如线性遍历来得快
再加上各种面向对象理论的洗脑...另外, 尽量把相同类型的数据存放在连续的内存空间里, 并且进行顺序访问
如果有需要, 甚至可以使用prefetch指令把数据加载到Cache中去
吐槽一句: 喜欢用if-else的程序员都不是好程序员...很多时候SOA(struct of array)比AOS(array of struct)是快的, 因为多数情况下我们遍历一个结构体数组, 只是访问其中的一个字段而已
SOA与AOS的区别, 就是面向对象与面向数据程序设计的区别之一...class vs struct
这才是面向对象与面向数据在语言层面的差异
最早认识到class性能会出问题的, 是从N3的代码里. floh有说为什么自己的引擎平台抽象层没有使用抽象类, 是因为虚函数对于主机平面的硬件架构性能很差...现在又出来个TileBasedRendering, 都是因为硬件的变化带来算法/架构上的变化
总得来说, 硬件在不断升级换代, 我们头脑也需要升级换代才能跟得上潮流
面向对象虽然加快了开发效率,但是并不是对机器友好的