如果分配器提供realloc语义,std::vector是否可以避免复制

Can std::vector avoid copying if allocator provides realloc semantics?

本文关键字:vector 是否 可以避免 复制 std 分配器 realloc 语义 如果      更新时间:2023-10-16

我有一个内存接口,它将获取地址空间与附加后备存储区分开。(在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附加备份。

这个接口允许我分配大量的地址空间,同时惰性地获取实际的物理内存。我想用它来创建一个"惰性向量",它会在适当的点请求后备存储,但不会在向量增长时复制当前的内容。

给定标准库的分配器的语义,这样的方案可能吗?

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

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

当然,您可以编写自己的类向量类来完成此操作——如果这对您很重要,您应该这样做。写一个容器类并不是那么困难。