c - 内存分配的差异

标签 c memory allocation

我想知道是否有人可以解释 ai 的内存分配之间的差异和*pai

int ai[10];
int *pai = (int * ) calloc (10, sizeof(int));

我知道第二个是动态分配的,但我很难解释原因。

最佳答案

让我们看看标准中指定了什么(明智的差异)

来自7.22.3.1 (在内存管理功能下)

... The lifetime of an allocated object extends from the allocation until the deallocation.

所以是的,这是动态分配的内存。它们的生命周期与局部变量的生命周期不同。通过调用 free,它们被释放。在那之前他们还活着。不依赖于创建它们的作用域的生命周期。

第一个是具有自动存储期限。这是主要的区别。因此,在声明它的 functions 作用域中,当它结束时,它的生命周期就结束了。

也有人说有堆和栈——但幸运的是 C 标准没有提及它。它完全实现了 C 标准所期望的功能。实现可以是任何东西。所呈现的差异最不受此类事物的困扰。

作为一个概念性的红丸(取自电影Matrix)pai具有自动存储持续时间,但它所包含的内存地址不是。变量pai当执行它所定义的函数时将会丢失。但它指向的内存却没有。

那为什么叫动态分配呢?

知道一件事 - 在编程时我们说 dynamic在语言的上下文中 - 这意味着我们正在运行时做某事。同样,我们在运行时通过调用类似 malloc 的函数来分配一些内存。 , calloc等等。这就是动态分配的原因。

关于c - 内存分配的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48152811/

相关文章:

android - 我的 Android 应用程序占用太多内存?

python - Airflow Python 脚本随任务退出并返回代码 -9,如何解决?

python - 如何在python中读取大型压缩文件而不将其全部加载到内存中

ios - 使用不可变类分配任何可变对象,反之亦然

c++ - 有哪些符合 C++ 标准的自定义分配器可用?

c++ - Linphone编译-配置: error: cannot run C compiled programs

c - ASCII 值 = 0 和 '\0'

c++ - 在 C/C++ 中使用枚举

c - "undeclared"命令中的变量 "#pragma"?

C++ 数组分配并没有真正分配