在多维类的3d数组中管理内存

时间:2014-01-26 17:11:50

标签: c++ arrays pointers memory-management polymorphism

我在这里有一个问题,有人可能会帮忙。 如果可以,非常感谢!

我正在尝试存储包含许多小对象的三维数组。 所有这些对象类都将从一个父类继承。

理想情况下,我正在查看32x32x32对象数组,并且每个对象不可能超过8个字节。 因此,每个最多8个字节的32768个对象= 256kb

然而,其中一些不需要8个字节的数据,在某些情况下只需要一个字节的数据。

问题是这些对象中的每一个都会根据它们的具体行为。因此,如果我调用(obj.print()),每个人的行为都会有所不同。

通过创建继承泛型接口类的子类,这本身很容易解决。但是因为它们被大量存储在3d数组中,所以将它们存储为指针会自动增加另外4个字节的开销 - 数据类型为8个字节,指向它的指针为4个字节。 平均而言,即使某些对象少于8个字节,内存开销仍会增加至少30%的使用率。

这本身并不是巨大的问题,直到我开始存储许多这些数据块 - 然后内存成为一个相当严重的问题。

从长期可维护性和代码管理的角度来看,这确实是最好的方法。但是我来到这里的聪明人,看看你是否有任何可以分享的智慧珍珠! :)

谢谢, 布赖恩

1 个答案:

答案 0 :(得分:0)

如果你坚持使用运行时多态,我有个坏消息 - 你将使用指针,这将增加一些内存开销。

对于1字节的多态结构,当你的成员函数是虚拟的时候会添加一个vtable指针,所以我不完全确定如何实现它们。

如果你可以删除多态,那么std :: tuple可能是另一种选择。迭代它或使用32 ^ 3元素初始化它可能会有问题,但使用模板可能是可行的,这取决于您可能想要实现的目标。

相关问题