设计:如何声明专用的内存处理程序类

问题描述:

在嵌入式类型系统上,我创建了一个小型对象分配器,它可以支持标准内存分配系统。这个分配器是一个Boost :: simple_segregated_storage类,它正是我所需要的 - O(1)alloc/dealloc时间在一些内部碎片的代价下的小对象。我的问题是如何最好地声明它。现在,它是在我们的mem代码模块中声明的范围静态,这可能很好,但它感觉有点暴露在那里,现在也永远链接到该模块。通常情况下,我将它声明为monostate或singleton,但是它使用动态内存分配器(其位于此处)。此外,在我们的系统上发生静态对象初始化之前,我们正在初始化和使用动态内存分配器(同样,内存管理器几乎是引擎最基本的组成部分。)为了解决这个问题,我添加了一个额外的'如果存在小内存分配器'来查看是否存在小对象分配器。如果现在必须在每个小对象分配上运行。在事情的计划中,这几乎可以忽略不计,但它仍然困扰着我。设计:如何声明专用的内存处理程序类

所以问题是,有没有更好的方法来声明这部分内存管理器,它有助于从内存模块解耦,也许不会花费额外的isinitialized()if语句?如果此方法使用动态内存,请解释如何避免管理器的小对象部分初始化不足。

+0

我一直在ARM上设计这样的事情。我见过的库不是专为具有8K或更少RAM的系统设计的。如果速度不重要,我希望垃圾收集的字符串/数组类可以在许多使用场景中最终需要不到常用库的一半RAM(例如,外部引用会将'uint16_t'索引放入托管数组中引用;引用或原始字节的小数组会有两个字节的开销,引用每个需要两个字节;较大的数组会有大约4%的额外开销)。 – supercat 2015-03-02 18:31:40

+0

这样的设计看起来是否合理?你知道这是否完成了吗? – supercat 2015-03-02 18:31:57

一个很好的指导方针是:说出你的意思,除非有充分的理由否则。这个分配器是一个全局静态对象,应该这样声明。现在,如果它的状态需要初始化,我会在初始化动态内存分配器的代码中这样做 - 因为这实际上是初始化内存分配系统的一部分,这又属于说明你的意思的标题。这样可以避免对每个电话进行不雅的有条件检查。

+0

这是我无法做到的原因,但我不记得是什么。我会仔细检查我的代码并回复你。 – 2010-05-06 17:40:14