C++ 是否可以保证std::vector使用allocate函数分配的每个内存也会通过一次释放调用立即释放?
我正在为std::vector编写自定义分配器,想知道std::vector如何使用指定的分配器?它可以为5个对象分配内存,然后部分取消分配内存,例如在前2个元素,然后3个元素。。。(我看不出有任何理由不这样做) 《标准》中有没有提到这方面的内容?我什么也找不到 是否保证C++ 是否可以保证std::vector使用allocate函数分配的每个内存也会通过一次释放调用立即释放?,c++,memory-management,vector,stl,allocator,C++,Memory Management,Vector,Stl,Allocator,我正在为std::vector编写自定义分配器,想知道std::vector如何使用指定的分配器?它可以为5个对象分配内存,然后部分取消分配内存,例如在前2个元素,然后3个元素。。。(我看不出有任何理由不这样做) 《标准》中有没有提到这方面的内容?我什么也找不到 是否保证std::vector使用分配函数分配的每个内存也会通过一次释放调用立即释放 对。std::allocator::deallocate的原型是 void deallocate( pointer p, size_type n );
std::vector
使用分配函数分配的每个内存也会通过一次释放调用立即释放
对。std::allocator::deallocate
的原型是
void deallocate( pointer p, size_type n );
它可以为5个对象分配内存,然后部分取消分配内存,例如在前2个元素,然后3个元素。。。(我看不出有任何理由不这样做)
但是n
不能与先前传递给匹配的allocate
函数的内容不同,如下所示:
解除分配指针p引用的存储,该指针必须是先前调用allocate()获得的指针。参数n必须等于最初生成p的allocate()调用的第一个参数
基本上,deallocate
的参数是
allocate
n
std::vector
使用分配函数分配的每个内存也会通过一次释放调用立即释放
对。std::allocator::deallocate
的原型是
void deallocate( pointer p, size_type n );
它可以为5个对象分配内存,然后部分取消分配内存,例如在前2个元素,然后3个元素。。。(我看不出有任何理由不这样做)
但是n
不能与先前传递给匹配的allocate
函数的内容不同,如下所示:
解除分配指针p引用的存储,该指针必须是先前调用allocate()获得的指针。参数n必须等于最初生成p的allocate()调用的第一个参数
基本上,deallocate
的参数是
allocate
n
这是所有定义的实现。通常,一旦
vector.size()==vector.capacity()
插入一些东西,它的容量就会翻倍。一个std::vector包含一个连续的内存块(不管怎样,你为什么关心呢?)我怎么写一个分配器呢?我不知道它是如何被调用的?比如说,分配了N个大小的内存,我把它放在不同的地方,如果它将N/2和N/2分开释放,我将从错误的位置释放。std::vector和std::分配器(或您的分配器)是松散耦合的。分配器不知道任何容器(用例)。这是所有定义的实现。通常,一旦vector.size()==vector.capacity()
插入一些东西,它的容量就会翻倍。一个std::vector包含一个连续的内存块(不管怎样,你为什么关心呢?)我怎么写一个分配器呢?我不知道它是如何被调用的?比如说,分配了N个大小的内存,我把它放在不同的地方,如果它将N/2和N/2分开释放,我将从错误的位置释放。std::vector和std::分配器(或您的分配器)是松散耦合的。分配器不知道任何容器(用例)。