带有静态分配节点的C ++ std :: list

时间:2018-01-01 17:25:15

标签: c++ linux list

Linux linked list允许将静态分配的节点放入列表中。我想用std :: list和自定义分配器做类似的事情。

对于嵌入式系统使用静态节点分配器的Linux方法的优点在于,分配的列表节点的数量总是可以保持为"足够的"。没有要分配的池或堆。如果静态分配,则列表节点将分配给正在使用的对象。当需要使用时,不需要时不会返回free或pool(可能是浪费),但随时可以被/用于其关联对象。

尝试用std :: list做一些事我可以写一个自定义分配器,但我发现我只有一个'池'要使用的构造类型。

由于列表节点(在include / c ++ / 6.3.1 / bits / stl_list.h中的ARM GCC 6.x实现struct _List_node_base中)是依赖于实现的(非可移植的)。

是否有为std :: containers执行静态节点分配的已知做法?

(我想如果我有一个特性std :: list :: node_type,我的交叉功能问题就会解决。)

2 个答案:

答案 0 :(得分:1)

如果您不介意关于列表使用的一些额外工作,您可以使用另一个std::list,其中包含特定列表类型的所有空闲节点。

您可以使用std::list::splice

将节点移入和移出该列表

答案 1 :(得分:0)

为了完成boost :: intrusive列表的使用,我实现了一个观察者类。随意评论使用的正确性。嘿,测试代码无论如何都适用。

链接在这里: https://github.com/natersoz/patterns/tree/master/observer/intrusive_list

感谢指向侵入列表的指示。