【问题标题】:Using realloc to increase size vs creating bigger dynamic array使用 realloc 增加大小与创建更大的动态数组
【发布时间】:2020-04-10 18:18:53
【问题描述】:

我问这个问题是为了学习;通常我会使用向量或链表来解决这个问题。

如果动态数组的大小在整个主代码中发生变化,使用这种方法更有效或更合乎逻辑:创建一个比前一个大一半大小的新动态数组并将以前的元素复制到其中,或使用 realloc使动态数组更大?如果其中之一更有效或更合乎逻辑,为什么?

【问题讨论】:

  • or using realloc -- 如果数组是非 POD 类型,realloc 将不起作用,例如 std::string
  • 出于某种原因,对象是否需要位于连续内存中?如果没有,为什么不直接消除这种限制,一切都会变得轻松。
  • 内存需要时间来分配,所以如果你知道数组元素的最大大小,那么一定要提前分配或reserve。如果您不这样做,那么您确实需要分析您的应用程序以了解最佳方法。我们无法真正为您解答。

标签: c++ arrays dynamic-memory-allocation


【解决方案1】:

realloc 可以在有空间的情况下扩展现有的内存块,完全避免整个分配 + 复制 + 释放过程。使用new[] 不允许这种可能性。

如果您正在编写惯用的 C++,您应该使用 std::vector,它在后台执行相同的操作。但是为了学习,如果你没有std::vector,那就用realloc吧。

请注意,realloc 无法识别对象。它不会调用构造函数和析构函数。如果你打算在 C++ 中使用它,你最好确切地知道你在做什么!

【讨论】:

  • 非常感谢您的回答。什么是平凡类型?
  • 什么是?搜索“c++ 普通类型”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 1970-01-01
  • 2021-12-25
  • 2018-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多