我有一个内存接口,可以将获取地址空间与附加后备存储区分开。 (在Linux下,界面管理的地址空间池是mmap' MAP_ANONYMOUS和MAP_NORESERVE,疯狂的MADV_DONTNEED和mprotect' ed PROT_NONE。然后通过madvise MADV_WILLNEED附加支持并且mprotect PROT_READ,PROT_WRITE和PROT_EXEC 。)
此界面允许我在懒洋洋地获取实际物理内存时分配大量地址空间。我想用它来创建一个"懒惰的矢量"这使得在适当的点上支持存储的请求,但是在它增长时从不复制矢量的当前内容。
鉴于标准库的分配器的语义可以实现这样的方案吗?感激地接受指针,提示或其他指导。
答案 0 :(得分:0)
标准库分配器接口中没有规定调整现有内存块的大小。只是“分配一个大小为N的块”和“释放一个块”语义。
所以,你的问题的答案是“不,你不能用std::vector
做到这一点”
当然,您可以编写自己的类似矢量的类 - 如果这对您来说很重要,那么您应该这样做。编写容器类并不是那很难。