【问题标题】:static allocated data structures静态分配的数据结构
【发布时间】:2010-10-19 11:29:52
【问题描述】:

我正在开发一个现有的嵌入式系统(内存有限,闪存有限, ...) 带有 RT 操作系统。所有数据结构都有固定的大小并被分配 在“编译时”,因此适用于 RT。没有动态内存 分配。编程语言是 C++,但没有可用的 STL。一世 喜欢替换一些数据结构,尤其是 LinkedList、Vector 和 带有一些更通用变体的地图。

到目前为止,我见过的最接近的是以下框架: http://apfw.sourceforge.net/。恕我直言,最大的缺点是 大小为 N 的 LinkedList,来自 T 的默认构造函数被调用 N 次。一种 更好的类应该静态分配 sizeof(T)*N 个字节。

有人知道我的图书馆有上述所有限制吗?

【问题讨论】:

  • 它很可能在图像中静态分配存储。但是 C++ 需要调用 ctors。您还希望它如何初始化 T 个实例?
  • 如果此框架支持自定义分配器,您可以尝试编写自己的分配器。
  • @sellibitze。不支持自定义分配器。
  • @wilx。首先调用字节构造函数。稍后通过放置新对象添加对象。至少这是我脑子里想的第一件事,如果我必须实现一些东西的话。
  • @wilx:std::vector 这样做的方式相同。它的容量都是原始字节,必要时会调用构造函数(通过放置 new)。

标签: c++ data-structures memory-management real-time


【解决方案1】:

您是否考虑过将自己的分配器(从静态池分配)传递给 STL 容器?

除此之外,我认为不存在这样的事情。您可能想查看this related question 以开始使用静态向量类。如果您这样做,请考虑将其设为开源。

【讨论】:

  • 当前目标没有 STL。如果有足够的 Flash 可用(下载链接是大约 2 KiBytes/s 的串行线,因此即使我添加更多 Flash 我也会遇到问题)我猜 STL 带有 O(1) 内存分配器(例如 @ 987654322@) 就可以了。我必须承认,我从未尝试过将 STL 切成小块。
【解决方案2】:

如果您要固定 LinkedList 的大小,为什么不创建自己的简单类并通过数组支持它?

【讨论】:

  • 因为可能需要 10% 的方法,与 STL 提供的相比,这将是可行的。我想如果没有人知道图书馆,我会写我自己的课程,把它贴在这里,让专家决定,我要做什么。
【解决方案3】:

我可以向您推荐以下内容:

http://www.codeproject.com/KB/recipes/Containers.aspx

这是我写的一篇关于容器类的另一种设计的文章。它们最大的优点之一是分配数据和存储在容器中是分开的。

例如,您可以在编译时声明您的静态数据,然后在运行时将其插入/从列表/树/等中删除。

【讨论】:

    猜你喜欢
    • 2022-01-14
    • 1970-01-01
    • 2011-05-04
    • 2022-01-05
    • 1970-01-01
    • 2020-04-02
    • 2019-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多