我正在为C/C ++编写垃圾收集器作为编程练习,其中一部分涉及全球范围 new. 。但是,垃圾收集器也使用 unordered_map (将指针存储到分配的块中),如果地图试图使用覆盖的新块,事情就会被严重弄乱(我认为它将尝试无限地循环)。为了创建它,我想使用新的位置,以避免将被覆盖的新召唤出来:

void *buffer = malloc(sizeof(unordered_map<void *, mem_t *>));
unordered_map<void *, mem_t *> map = new(buffer) unordered_map<void *, mem_t *>();

(mem_t是我定义的结构,但我认为这是不相关的。我认为使用新的位置可以解决这个问题,但显然不是。我很确定unordered_map在内部打电话给新的。会给它一个分配器(我该怎么做?)解决此问题吗?如果没有,这个问题是否可以解决?

有帮助吗?

解决方案

完整的声明 unordered_map, ,以及所有STL容器的 allocator 作为最后一个参数:

template<class Key, class Ty, class Hash, class Pred, class Alloc>
    class unordered_map;

那就是容器为其所有内部结构提供内存的地方。您可能想在这里实施自己的分配器。 维基百科 看起来是一个不错的起点。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top