gpt4 book ai didi

c++ - 使用包含指针的 vector 或值 vector (以避免堆碎片)更好吗?

转载 作者:行者123 更新时间:2023-11-30 01:17:19 25 4
gpt4 key购买 nike

我知道很多关于避免堆碎片的文章。我的问题与我们使用 vector 存储数据时发生的具体情况有关:

class foo{
public:
std::vector<bar>; // Or I can have std::vector<bar*>
};

我使用 new 或 delete 没有问题(我没有内存泄漏,当一个 bar 没有被使用时我很清楚,我可以在必要时调用 delete)。但是关于堆碎片,哪个更好?这会使堆栈溢出的可能性更大吗?

编辑:我实际上没有任何新信息要添加。我只是想感谢大家,并说我发现任何带有 C++ 标签的问题似乎都会吸引这么多知识渊博的帮助者。它真的很不错。谢谢。

最佳答案

TL;DR,除非你有充分的理由,否则在声音测量方面,总是喜欢使用 vector具有值类型。

我会为 std::vector<bar> 辩护形式。除非您有其他(测量的)原因,否则 vector 的保证连续内存使用值类型是一个更好的主意。当 vector 分配一个连续的内存块时,对象将在内存中彼此相邻(有一些保留)。这使主机系统和运行时有更好的机会避免碎片化。单独分配对象可能会导致碎片化,因为您无法控制它们的分配位置。

我注意到您对堆栈的担忧; vector有一个小的堆栈分配,所以这应该不是问题,“通常的”分配器 std::allocator使用 newvector 分配内存在堆上。

为什么要 vector总是受到青睐? Herb Sutter 详细介绍了这一点; http://channel9.msdn.com/Events/Build/2014/2-661他在 23:30 左右开始使用辅助图表、图表、解释等,并在 46:00 左右开始学习 Bjarne 的 Material 。

关于c++ - 使用包含指针的 vector 或值 vector (以避免堆碎片)更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24671182/

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