c++ - 如何在 C 和 C++ 中分配和释放 *array* 内存?

标签 c++ c arrays memory-management

我的问题具体是关于数组,不是对象。

关于 malloc()/free()new/delete 的一些问题,但它们都集中在它们使用方式的差异上。我了解它们的使用方式,但我不了解是什么根本差异导致了使用差异。

我经常听到 C 程序员说 malloc()free() 是代价高昂的操作,但我从未听 C++ 程序员这样说 新建删除。我还注意到 C++ 没有对应于 C 的 realloc() 的操作。

如果我正在编写等同于 C++ 的 vector 类,我希望在调整数组大小时避免复制整个数组,但使用 newdelete 你必须复制。在 C 中,我会简单地 realloc()。值得注意的是,realloc() 可能只是复制整个数组,但我的印象是它使用了相同的指针并为其分配了更少的空间,至少在缩小规模时是这样。

所以我的问题是,malloc()free() 使用的算法与 new删除。更具体地说,为什么 C 方式有更昂贵的耻辱,为什么 C++ 方式不允许在不复制的情况下调整大小?

最佳答案

引擎盖下没有真正的区别 - 通常默认的 newdelete 运算符将简单地调用 mallocfree

至于“更昂贵的耻辱”,我的理论是:在过去,每个周期都很重要,malloc 所花费的时间在很多情况下确实很重要。但到 C++ 出现时,硬件速度要快得多,免费商店经理所花费的时间也相应地减少了。重点从机器资源的有效使用转移到程序员资源的有效使用。

为什么 C++ 缺少 realloc 等价物,我不知道。

关于c++ - 如何在 C 和 C++ 中分配和释放 *array* 内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1304737/

相关文章:

c++ - 具有恒定大小的 vector

c++ - 错误 X8000 : D3D11 Internal Compiler error : Invalid Bytecode: Invalid operand type for operand #1 of opcode #86 (counts are 1-based)

python - 定向梯度直方图的分块归一化

取消列表中某个值以下的元素

c - 编写一个函数,反转第一列和最后一列的数组元素

C++ 两个库依赖于相同的库但不同的版本?

c - 将 MATLAB 代码移植到优化 C 的有效方法

c - 隐藏静态全局和局部标识符

javascript - 按行号过滤数组数组

javascript - Google 脚本 - 无法写入单个二维数组元素