2010-10-19 41 views
2

我正在使用RT OS在现有的嵌入式系统(内存有限,Flash有限, ...)上工作。所有的数据结构都有固定的大小,在“编译时”分配为 ,因此适用于RT。没有动态内存 分配。编程语言是C++,但没有STL可用。我 喜欢一些更通用的变种来代替某些数据结构特别的LinkedList,Vector和 地图。静态分配的数据结构

迄今为止我见过的最接近的是如下框架: http://apfw.sourceforge.net/。 IMHO的最大缺点是,对于大小为N的 LinkedList,T的默认构造函数被称为N次。更好的类应该静态分配sizeof(T)* N个字节。

有谁知道我库上述所有的限制?

+0

它最有可能在图像静态分配存储空间。但是C++需要调用ctors。你还希望如何初始化T实例? – wilx 2010-10-19 11:43:23

+0

如果这个框架支持自定义分配器,你可以尝试编写你自己的分配器。 – sellibitze 2010-10-19 11:48:26

+0

@sellibitze。自定义分配器不受支持。 – azraiyl 2010-10-19 11:49:17

回答

1

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

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

+0

目前目标没有STL。如果有足够可用的Flash(下载链接是约2 KiBytes/s的串行线,所以即使我添加更多的Flash我有一个问题),我想用STL的O(1)内存分配器(如HTTP ://rtportal.upv.es/rtmalloc/)就可以了。我必须承认,我从来没有尝试过用小块来切割STL。 – azraiyl 2010-10-19 12:27:44

1

如果您正在修复LinkedList的大小,为什么不创建自己的简单类并通过数组备份它?

+0

因为可能有10%的方法需要,比较STL提供的,这是可行的。我想,如果没有人知道图书馆,我会写我自己的课,在这里发布,让专家来决定,我会怎样。 – azraiyl 2010-10-19 11:45:33

1

我可以建议你如下:

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

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

你可以在编译时声明你的静态数据,然后在运行时插入/从/ list/tree /中移除它。