繁体   English   中英

在 memory 中会发生什么移动到 C++

[英]what happens in memory for move in C++

我正在阅读 c++ 入门移动部分并对移动实现感到困惑。

假设我们有一个向量,它有 4 个元素,占据 4 个连续的 memory 位置。 内存[0~3]。 向量的容量为 4。

假设 MEM[4] 现在不可用,因为它被另一个线程或程序占用,或者由于任何原因。 这可能吗?

现在我们需要添加另一个元素。 因为我们必须保持连续的memory,我们只能找到另一条连续的memory,它可以容纳8个向量条目,例如MEM[5~12]。 这样,我们确实将 MEM[0~3] 中的内容复制到 MEM[5~8] 中,然后在 MEM[9] 处添加新元素,对吗?

我们无法重用旧的 MEM[0~3] 并在保持连续地址的同时增加容量。

如果它是链表,我可以理解这一举动。 但是对于数组之类的,我有点困惑。 请帮忙解释一下。 谢谢。

这完全在 C++ 标准的 scope 之外。

标准中没有任何内容禁止这种优化。 特定的 C++ 实现肯定有可能确定已经用完其reserve() d 容量的std::vector可以在不分配更大的存储空间并将向量的现有内容移动到更大的分配存储空间的情况下进行扩展。

如果是这样,那么这是一个非常合理且明智的优化。 但 C++ 标准中也没有任何内容需要这种特定优化。 鉴于std::vector的存储扩展算法已经要求生成的向量插入必须具有恒定的分摊时间复杂度,因此可以合理地得出结论,跟踪 memory 分配到如此详细程度的额外复杂性可能只会产生边际收益,以换取更大的总体开销,并且实际上可能会总体上产生更多的开销。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM