c++ - 设计 : How to declare a specialized memory handler class

标签 c++ memory-management embedded named-scope

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

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

最佳答案

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

关于c++ - 设计 : How to declare a specialized memory handler class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2670781/

相关文章:

c++ - 使用 C++ 从目录和子目录中返回 vector 中的文件

c++ - 涉及填充时堆的 MSVC 初始化

java - 在Java中,如何分配给定数量的内存,并保留它直到程序退出?

c# - 有人知道任何支持 C# Mono 的嵌入式 Linux DIY 工具包吗?

c - 如何初始化 DT028ATFT 显示屏

c++ - 调用线程会在 thread.join() 之后看到对局部变量的修改吗?

c++ - 这个 "=+"不应该是语法错误吗?

c++ - Langford 序列 - 利用对称性/去除对称性

c - 由电影支持的 QTMovie 最初可以工作,但不能以其他方法工作

android - 声明 Android 终端和嵌入式 Linux 卡之间的 USB 接口(interface)