gpt4 book ai didi

c++ - 当 std::vector 调整大小时(通过 reserve() 或 resize())默认分配器做什么?

转载 作者:行者123 更新时间:2023-11-30 00:39:23 27 4
gpt4 key购买 nike

当 std::vector 调整大小时(通过 reserve() 或 resize())默认分配器做什么?

  • std::vector 内部使用的内存块实际上已调整大小。

  • 分配新内存块,将数据从旧内存块移动(例如,std::moved)到新内存块,最后旧内存块被释放.

最佳答案

C++ 分配器不支持 C 的 realloc。每当 vector 需要更多内存时,它必须分配新的存储空间,从旧的移动到新的,然后释放旧的。

无论哪种方式,realloc 都不适合 vector。对于典型的分配器,realloc 只会在您缩小其大小或在某些情况下仅增加几个字节时为您节省繁重的复制操作。 vector 永远不会缩小,只会以非常大的步长增长。

请注意,移动支持是 C++ 2011 中的新行为。以前的版本将复制。

关于c++ - 当 std::vector 调整大小时(通过 reserve() 或 resize())默认分配器做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8955365/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com