我想知道是否有人可以解释 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/