如果分配器提供realloc语义,std::vector是否可以避免复制
Can std::vector avoid copying if allocator provides realloc semantics?
我有一个内存接口,它将获取地址空间与附加后备存储区分开。(在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
这样做"
相关文章:
- std::vector::迭代器是否可以合法地作为指针
- 是否可以将具有不同签名的 lambda 存储在 std::vector 中并在函数中执行它们(使用各自的参数)?
- 除了 std::vector 之外,是否有一个 std 容器不会复制和销毁作为类的元素?
- vector是否为std::移动的对象连续分配内存
- 使用 std::vector::swap 方法在C++中交换两个不同的向量是否安全?
- std::vector::assign/std::vector::operator=(const&) 是否保证在"this"中重用缓冲区?
- std::vector 是否有用于引用的复制构造函数?
- 递减 std::vector::begin 是否未定义,即使它从未被使用过?
- 如何判断 std::vector 是否调整了自身大小,以及如何解释指向向量内值的指针不再有效
- std::find on empty vector 是否会导致未定义的行为
- 使用具有不同整数类型的 std::vector 是否始终安全<size_t>?
- std::vector是否适合频繁调整大小
- 如何检查两个 std::vector 是否只包含相同的元素?
- vector是否调用指向对象的指针的析构函数
- 使用 std::vector<T*> 是否不如 std::vector<shared_ptr<T>> 安全?
- 在c++中,一个vector是否占用连续的内存槽?
- 我的std::vector是否包含指针或结构体?
- 如果分配器提供realloc语义,std::vector是否可以避免复制
- std::vector是否有{Initial number of elements}构造函数
- std::vector<T> 是否只容纳它需要的确切数量的元素或额外的空间?