c - C 中的动态数组

标签 c arrays memory-management dynamic-arrays

根据定义,数组是一大块连续的内存位置。 我从 Dynamic 了解到的是我们可以在运行时分配内存。 因此,对于动态数组,假设我们在运行时分配了 100 个内存空间。现在我们执行一些其他操作并为其他变量分配一些内存空间。 由于我们创建的数组是动态的,所以我想我们可以添加更多的元素,它会占用更多的内存空间。 但我不明白的是,这将如何连续,因为下一个内存地址是每个占用的,并且根据定义,数组应该是连续的???

最佳答案

您正在混合术语。在 C 和 C++ 中,数组 在技术上是同一类型的连续 元素的序列。当使用术语“动态数组”时,您不是在使用标准规定的术语,而是一个通用的计算机科学术语,它指的是大小可以在运行时更改的类似数组的容器。

在 C++ 中,这些类似数组的容器是通过例如 vector class 实现的。 , 可用包括 <vector>标准库头。在其他语言中可能还有其他设施。

C 没有动态数组,但您可以动态分配数组。这里的术语“动态”有不同的含义:它与 management of dynamic memory 有关。 ,这就是你在使用 malloc 时所做的事情和 free 功能。

在 C++ 中,动态数组的实现是在后台管理动态内存,但这是一个与术语无关的实现细节。

同样在 C 中,您可以实现动态数组(例如编写自定义库),但它们的使用不受语言语法的支持,就像在 C++ 中一样。

动态数组(无论是在 C++ 中还是在 C 中)的存储是否连续也是一个实现细节。如果您需要将动态数组(一般含义)实现为 C/C++ 数组(技术术语),您将最终重新分配内存并显式复制元素。标准 C 库提供了 realloc 功能来帮助应对这样的任务。

关于c - C 中的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18800763/

相关文章:

c - 有符号整数的平台独立存储

创建具有大量标志的位标志变量或如何创建大位宽数字

C 结构体可以工作吗?

python - Pybind11:使用 Pybind11 在 C++ 中转换 numpy 数组的问题

c - 包括来自其他目录的 C 头文件

c++ - 使用概念或 SFINAE 检查类是否具有带有 std::array 参数的模板化成员函数

php - 使用 jQuery 获取表单数组的值

c++ - 覆盖标准库使用的内存分配方法?

c++ - 使用共享指针进行运行时数组分配

c# - 内存不足异常,即使有 30 GB 内存可用