如果allocator提供realloc语义,std :: vector可以避免复制吗?

时间:2014-05-06 21:38:40

标签: c++ vector stl realloc allocator

我有一个内存接口,可以将获取地址空间与附加后备存储区分开。 (在Linux下,界面管理的地址空间池是mmap' MAP_ANONYMOUS和MAP_NORESERVE,疯狂的MADV_DONTNEED和mprotect' ed PROT_NONE。然后通过madvise MADV_WILLNEED附加支持并且mprotect PROT_READ,PROT_WRITE和PROT_EXEC 。)

此界面允许我在懒洋洋地获取实际物理内存时分配大量地址空间。我想用它来创建一个"懒惰的矢量"这使得在适当的点上支持存储的请求,但是在它增长时从不复制矢量的当前内容。

鉴于标准库的分配器的语义可以实现这样的方案吗?感激地接受指针,提示或其他指导。

1 个答案:

答案 0 :(得分:0)

标准库分配器接口中没有规定调整现有内存块的大小。只是“分配一个大小为N的块”和“释放一个块”语义。

所以,你的问题的答案是“不,你不能用std::vector做到这一点”

当然,您可以编写自己的类似矢量的类 - 如果这对您来说很重要,那么您应该这样做。编写容器类并不是很难。