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

Joh*_*tes 9 c++ stl vector realloc allocator

我有一个内存接口,分离出获取地址空间与附加后备存储.(在Linux下,接口管理的地址空间池是mmap'ed MAP_ANONYMOUS和MAP_NORESERVE,madvise'ed MADV_DONTNEED和mprotect'ed PROT_NONE.然后通过madvise MADV_WILLNEED和mprotect PROT_READ,PROT_WRITE和PROT_EXEC附加支持.)

这个界面允许我分配大量的地址空间,同时懒洋洋地获取实际的物理内存.我想用它来创建一个"懒惰的向量",它在适当的点上提出后备存储请求,但是当它增长时从不复制向量的当前内容.

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

Mar*_*low 0

标准库分配器接口中没有提供用于调整现有内存块大小的规定。只有“分配大小为 N 的块”和“取消分配块”语义。

所以,你的问题的答案是“不,你不能这样做std::vector

当然,您可以编写自己的类似向量的类来执行此操作 - 如果这对您很重要,您应该这样做。编写容器类并不是那么