我注意到Visual Studio(2010)的std::map实现为其红黑树中的每个节点分配一个新的单独的内存块。也就是说,对于映射中的每个元素,都会通过
这对我来说似乎有些浪费:难道不应该像std::vector实现一样,在块中以“(小) n”分配节点吗?
因此,我想澄清以下几点:
operator new ... malloc
使用std::map的默认分配方案来分配一个新的原始内存块。这对我来说似乎有些浪费:难道不应该像std::vector实现一样,在块中以“(小) n”分配节点吗?
因此,我想澄清以下几点:
- 我的默认分配方案的说法是否正确?
- “所有”std::map的STL实现是否都是这样工作的?
- std中是否有任何东西阻止std::map实现将其节点放入内存块中,而不是为每个节点分配一个新的内存块(通过其分配器)? (复杂度保证等)?
Loki :: AssocVector
,它在vector
上实现了map
接口(但不是其失效条件),以获得更好的性能。 - Matthieu M.