对于在std::vector
中使用的标准分配器接口,是否支持重新分配?我有一个相当具体的用例,其中能够直接realloc
比分配,移动和释放更有效。
编辑:抱歉 - 我绝对无意调用实际 realloc
,我的意思是一个带有这些语义的函数。实际上,我在后台分配堆栈,如果我从堆栈中分配更多,那么我就无法释放它下面的内存,这是完全浪费,因为无论如何都没有必要再分配,因为有很多可用的连续自由空间。因此,如果我可以被要求在一个步骤中重新分配,那么我可以避免首先分配一些东西并浪费一些内存,其次,移动vector
的所有内容。
答案 0 :(得分:13)
我们尝试但失败了:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1953.html
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2045.html
编辑:我知道你的意思。 ; - )
答案 1 :(得分:1)
您可以在std :: vector中保存的结构中放置一个bool标志,以指示它是否在逻辑上被删除。要删除元素,请将此标志设置为true,但不要将其物理删除。要重新分配元素,请查找一个为true的标志,将其设置为false以显示其未删除并使用它。
答案 2 :(得分:0)
我认为realloc()
不是STL分配器接口的一部分。但是realloc()
无论如何总是一个废话,因为你真的不知道你的操作系统是否会扩展你的分配或将你带到一个新的。实际绩效is very OS-dependent。如果你知道你想要重新分配,你可以提前分配一大块内存,幸运的是STL很容易。
您是否有不希望使用的用例?