C-动态内存分配-入门

时间:2020-02-23 14:31:53  来源:igfitidea点击:

在本教程中,我们将学习使用C编程语言进行的动态内存分配。

我们在"数组"教程中了解了数组。
因此,我们知道要创建一个数组,必须在编译代码之前指定数组中的元素数。

int arr[10];

如果不指定大小,则在代码编译期间会出现错误。

以下代码将在编译过程中引发错误。

int arr[];	//this will throw an error

另外,如果数组的大小与保存的数据数量相比太大,我们将浪费内存。

如果数组的大小小于要保存的数据数量,我们还将面临问题。

这是动态内存分配出现的时候,因为它允许我们在运行时分配内存。

用于动态分配内存的函数

以下是我们要动态分配内存时使用的功能。

函数说明
malloc此函数分配所需的字节数,并返回指向已分配内存位置的第一个字节的指针。
calloc此函数分配元素数组并将其初始化为零,并返回指向分配的内存位置的指针。
realloc此函数将修改先前分配的内存位置的大小。
free此功能将释放先前分配的内存位置。

内存区域

下图表示内存区。

所有程序指令,全局变量和静态变量都存储在称为永久存储区的存储区中。

局部变量存储在称为堆栈的内存区域中。

永久存储区和堆栈之间的可用存储区称为堆。
这是程序执行期间可用于动态分配的区域。

由于在函数和块中局部变量的创建和可移动,因此堆的大小在程序执行期间不断变化。

因此,我们遇到的一个常见问题是动态内存分配期间内存溢出。

当没有足够的内存空间用于分配时,上述内存分配函数将返回NULL。