【发布时间】:2021-03-08 12:10:18
【问题描述】:
我有一个基类,并且(可能)有许多派生类。我想为这些派生类提供 4 个实例,但这些实例会发生变化。例如。假设派生类 C1..C20,则删除 C4 的一个实例,并创建一个新实例 C7。
由于内存限制,我无法创建所有派生类的 4 个实例。
我在 Arduino 平台上工作。我可以假设:
- 当我
delete一个实例和new一个实例,并且派生类没有任何实例变量时,delete第一个实例的内存缺口,会被new创建的实例填充?请注意,派生类有不同的方法(但我认为这只影响 V-table)。 - 我可以假设,当实例使用的内存量相同时,这也是正确的吗? (例如,如果基类使用 10 字节,派生实例使用 20 字节,新实例也使用 20 字节,那么它将使用相同的空间吗?
如果情况 2 为真,那么让两个实例保持相同(内存)大小的最佳方法是什么?就像为差异放置一个未使用的字节数组一样,例如:
class C
{
byte a;
}
class C1: C
{
byte a;
long b;
}
class C2: C
{
byte a;
byte _unused[4];
}
我猜我也必须考虑对齐?
【问题讨论】:
-
您的
_unused由于对齐而错误,C1(可能)在a和b之间有填充,而C2在a和_unused之间没有填充 -
@Jarod42:是的,所以我想我必须考虑对齐。
标签: c++ memory-management new-operator delete-operator arduino-c++