0

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

所以问题是,是否有更好的方法来声明内存管理器的这一部分,有助于将其与内存模块分离,并且可能不会花费额外的 isinitialized() if 语句?如果此方法使用动态内存,请说明如何解决管理器小对象部分初始化不足的问题。

4

1 回答 1

1

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

于 2010-05-05T22:03:42.877 回答