所有程序和程序的所有部分的目的都是将数据从一种形式转换为另一种形式。这是Mike Acton在CppCon 2014上关于数据驱动设计的演讲中所说的话,我在试图加快我的实体更新速度时重新浏览了它。众所周知的数组结构和结构数组的材料原来只是它的一个小部分。实际上,运行时间的大部分是他争论说硬件是平台,如果你不理解数据,你就不理解问题,而且他还计算了64个字节缓存行中实际使用的字节。

我被两个事情惊讶了。第一个是它对C++的内容有多少,实际上它更多的是关于问题的形状。他总是回归到“当有一个时,有很多”的说法,这听起来像是一句标语,直到你看到它用来拒绝单个对象更新作为设计单位时。第二个是几乎没有它是指导性的。没有模式列表,只有更难的指示,了解你的程序实际上看到的数据。

我在重写之前进行了审计。我的91个组件结构中有31个带有一个布尔值和一个指针的结构,所以我把两个最热的结构分成并行数组,并测量。我的最差场景从9.1毫秒到8.6毫秒,实际上是这样的。另一个毫秒来自不访问那些在本帧中没有什么事可做的实体。在每个轻量级场景中,这个改变测量为零,内聚度在运行之间有所波动。

我们的工具散落在各处,一人在Rider,一人在Neovim,一人在verdent。审计使我得到了一个真正的收益,但仅在一个场景中才有效,而在其他场景中却没有效果,所以我想要的数字是实体数量,随着布局开始变得重要。然而,我没有得到这个数字。演讲也没有给出这个数字,因为这个数字属于场景和机器,而不是技术。