C++ C++;混淆类以增强引用的局部性?

C++ C++;混淆类以增强引用的局部性?,c++,class,localityofreference,C++,Class,Localityofreference,我们是否应该根据位置而不是概念来组织课程 假设我们编写一个程序来模拟一个真实的环境,这个环境有三个对象:汽车、道路和树。传统的OOP设计建议从概念上分离这3个独立的类 但是,假设car和road对象在其类成员数据和方法中进行了数百万次计算。由于参考位置的原因,我们是否可以通过将汽车和道路混合成一个CarRoad类来提高性能?或者,如果这个例子太荒谬,如果我们有另一个单独的车轮类,它与汽车密切相关,如果它们的类成员经常交互,我们是否应该将汽车和车轮类混杂在一起?除非我真的分析了两个不同的版本并比较

我们是否应该根据位置而不是概念来组织课程

假设我们编写一个程序来模拟一个真实的环境,这个环境有三个对象:汽车、道路和树。传统的OOP设计建议从概念上分离这3个独立的类


但是,假设car和road对象在其类成员数据和方法中进行了数百万次计算。由于参考位置的原因,我们是否可以通过将汽车和道路混合成一个CarRoad类来提高性能?或者,如果这个例子太荒谬,如果我们有另一个单独的车轮类,它与汽车密切相关,如果它们的类成员经常交互,我们是否应该将汽车和车轮类混杂在一起?

除非我真的分析了两个不同的版本并比较了性能,否则我不会做出这样的决定

否则我想尝试一些东西,比如, 1.若另一个类中有一个具有模板参数并传递它,并在编译时实例化它,那个么这会更有意义吗。 2.将一个类放在另一个类中,但内联它的所有方法,并强制它(实际上强制它的是编译器标志/属性…)查看生成的二进制文件是否具有不同的局部性


只是一个随机的想法。

汽车和道路是否可以合并为一个类取决于您试图建模的系统。永远不要仅仅为了获得好的引用位置而尝试合并(尽管您的想法是Superflues)

当您实例化这个类的对象时,引用的局部性就出现了。让我通过一个简单的例子向您展示:-

假设我们必须在容器中选择向量或映射

1) 地图提供了关于矢量的较差参考位置:-

map是根据平衡二叉树在内部实现的。所以,这意味着映射和存储数据还存储两个指针,即左子树和紧子树(也可能有指向父树的指针)。这意味着每个元素需要更多的空间来存储向量中相同的数据。因此,在这种情况下,可以将更少的数据放入一页虚拟内存中

2) 矢量提供了良好的参考位置:-


因为在向量中存储指针和数据并不麻烦,所以与map相比,它每页可以存储更多的元素。这就是为什么矢量在参考位置上优于地图。

好问题。我会非常乐观,并假设乐观主义者为你做了很多事情。我理解你对地图和向量的比较。我在某个地方读到,相邻声明的类成员数据相邻存储在生成的机器代码中,因此汽车的类成员不会相邻存储在道路的类成员上。