在嵌入式系统上,我创建了一个小型对象分配器,它可以放在标准内存分配系统之上。此分配器是Boost :: simple_segregated_storage<>类,它完全符合我的需要 - O(1)在小对象上分配/释放时间,代价是内部碎片。我的问题是如何最好地宣布它。现在,它的范围静态在我们的mem代码模块中声明,这可能很好,但它感觉有点暴露在那里,现在也永远链接到该模块。通常,我将它声明为单值或单例,但它使用动态内存分配器(位于此位置。)此外,我们的动态内存分配器正在初始化并在我们的系统上发生静态对象初始化之前使用(同样,内存管理器几乎是引擎最基本的组件。)为了解决这个问题22,我添加了一个额外的“如果存在小内存分配器”,以查看是否存在小型对象分配器。如果现在必须在每个小对象分配上运行。在方案中,这几乎是可以忽视的,但它仍然困扰着我。
所以问题是,是否有更好的方法来声明内存管理器的这一部分,它有助于将其与内存模块分离,并且可能不会花费额外的isinitialized()if语句?如果此方法使用动态内存,请解释如何避免缺少管理器的小对象部分的初始化。
答案 0 :(得分:1)
一个好的指导方针是:说出你的意思,除非有充分的理由不这样做。此分配器是一个全局静态对象,应该声明为此。现在,如果它的状态需要初始化,我会在初始化动态内存分配器的代码中执行此操作 - 因为这实际上是初始化内存分配系统的工作的一部分,这再次属于说出你的意思的标题。这样可以避免对每次通话进行不规范的条件检查。