`显式向量( size_type count, const Allocator& alloc = Allocator() );`和`std::vector<T,Allocator>::reserve`之间的区别

问题描述 投票:0回答:1

有什么区别

std::vector<uint8_t> vec1(size);

std::vector<uint8_t> vec2;
vec2.reserve(size);

它们都在堆上分配内存吗?

c++ vector stl
1个回答
0
投票

有什么区别?

不同之处在于,第一种方法在构造函数中设置了

vec1
的容量,这意味着它可以用
size
类型的
uint8_t
元素填充,而无需重新分配。然而,如果
vec2
大于
size
vec2.capacity()
需要重新分配内存,这意味着它需要调用
allocate()
的成员函数
std::allocator<uint8_t>
两次。如需了解更多信息,请查看文档

它们都在堆上分配内存吗?

一般来说,

allocate()
确实从堆中称为“内存池”的东西分配内存。但这并不是唯一的选择。我们可以将任何符合要求的实现称为分配器,但我们没有指定它是如何工作的。可以在here找到类似的答案。 在这里我想提供一个简单且不完整的示例来说明这一点:

template <typename T> class my_allocator { private: // max size for allocation static constexpr size_type MAX_SIZE = 64; // data int8_t _data[MAX_SIZE]; };

这样的话,只要我们实现了标准要求的所有接口,就可以从栈中的数组中分配内存了。

© www.soinside.com 2019 - 2024. All rights reserved.