【发布时间】:2016-05-24 02:53:10
【问题描述】:
所以我正在开发一个内存非常有限且没有 MMU 的小型 ARM 嵌入式系统。我有几个对象需要动态分配给不同的函数,这些函数都继承自同一个超类,但执行不同的函数并且可能大小不同。我没有足够的可用内存在启动时将它们全部实例化并将它们留在原处。
举个例子,我可能有类似这样定义的对象:
class Waveform1 : public OutputStream
class Waveform2 : public OutputStream
class Waveform3 : public OutputStream
并且子类将具有不同的大小,因为有些子类的方法和私有变量可能比其他的少,但很可能没有一个比其他任何一个大得多。
我想做的是分配一个缓冲区以在系统启动时与放置 new 一起使用,该缓冲区大到足以包含最大的已定义对象。然后我应该能够毫无问题地在那里实例化和销毁对象,因为它总是足够大以容纳所需的最大对象。我希望自动处理这个问题,因为随着系统设计的进行,新对象可能会添加到列表中。
有没有一种规范的方法来完成这个,所以看起来我知道我在做什么?
【问题讨论】:
-
std::max({sizeof(Waveform1), sizeof(Waveform2), sizeof(Waveform3)})? -
@Jarod42 Err...我忘了说,STL 可能不可用。 :(
-
max应该足够简单,可以重新实现。 -
我会看看 - 通过预处理来处理这绝对是我想要的。
-
constexpr够了吗?
标签: c++ embedded placement-new