是std::vec::shrink_to_fit
分配一个新的、更小的vec.len()
数据缓冲区,复制到它,然后销毁旧缓冲区,还是它以某种方式向内存分配器指示可以释放缓冲区的未初始化部分,并简单地释放该部分内存?这有可能吗?这取决于内存分配器吗?
我很抱歉在这里问一个离题的问题,但如果这是可能的,为什么我们不实现从向量的前面弹出,例如,简单地将从缓冲区开始释放std::mem::size_of<T>()
个内存量,并将指针递增1,而不是将所有元素移位1?
是std::vec::shrink_to_fit
分配一个新的、更小的vec.len()
数据缓冲区,复制到它,然后销毁旧缓冲区,还是它以某种方式向内存分配器指示可以释放缓冲区的未初始化部分,并简单地释放该部分内存?这有可能吗?这取决于内存分配器吗?
我很抱歉在这里问一个离题的问题,但如果这是可能的,为什么我们不实现从向量的前面弹出,例如,简单地将从缓冲区开始释放std::mem::size_of<T>()
个内存量,并将指针递增1,而不是将所有元素移位1?
Vec::shrink_to_fit()
使用Allocator::shrink()方法来缩减分配(通过内部RawVec::shrink_to_fit()方法,该方法可以简单地就地调整现有分配的大小而不移动数据,或者它可以返回不同的存储块.
您不能通过调整向量的大小来从其前面弹出,因为内存分配不能更改其起始地址,只能更改其长度.