【发布时间】:2014-01-26 17:11:50
【问题描述】:
我有一个问题,也许有人可以帮忙解决。 如果可以的话,非常感谢!
我正在尝试存储一个包含许多小对象的三维数组。 所有这些对象类都将继承自一个父类。
理想情况下,我正在查看一个 32x32x32 的对象数组,每个对象不太可能超过 8 个字节。 因此,32768 个对象,每个对象最多 8 个字节 = 256kb
但是其中一些不需要 8 个字节的数据,在某些情况下只需要一个字节的数据。
问题在于,这些对象中的每一个都将根据它们的本质具有一组不同的行为。因此,如果我调用 (obj.print()),每个人的行为都会有所不同。
这本身很容易通过创建继承通用接口类的子类来解决。然而,因为它们被大量存储在 3d 数组中,将它们存储为指针会自动增加另外 4 个字节的开销 - 8 个字节用于数据类型,4 个字节用于指向它的指针。 平均而言,即使某些对象小于 8 字节,内存开销仍会增加至少 30% 的使用率。
这本身并不是一个大问题,直到我开始存储这些数据块中的许多 - 然后内存成为一个相当严重的问题。
从长期可维护性和代码管理的角度来看,这确实是最好的方法。但是我来到这里的聪明人那里,看看你是否有任何可以分享的智慧珍珠! :)
谢谢, 布赖恩
【问题讨论】:
-
您可以高效地实现自己的可区分联合。
-
内容是多态的,引用来自同一公共基础的不同派生的实例在同一个容器中,会在一定程度上限制您的选择。
-
占用一个字节的多态对象是一种理论上的可能性,标准并未禁止,但您必须稍微了解一下实际可以做到这一点的实现。
标签: c++ arrays pointers memory-management polymorphism