C-动态内存分配-入门
时间:2020-02-23 14:31:53 来源:igfitidea点击:
在本教程中,我们将学习使用C编程语言进行的动态内存分配。
我们在"数组"教程中了解了数组。
因此,我们知道要创建一个数组,必须在编译代码之前指定数组中的元素数。
int arr[10];
如果不指定大小,则在代码编译期间会出现错误。
以下代码将在编译过程中引发错误。
int arr[]; //this will throw an error
另外,如果数组的大小与保存的数据数量相比太大,我们将浪费内存。
如果数组的大小小于要保存的数据数量,我们还将面临问题。
这是动态内存分配出现的时候,因为它允许我们在运行时分配内存。
用于动态分配内存的函数
以下是我们要动态分配内存时使用的功能。
函数 | 说明 |
---|---|
malloc | 此函数分配所需的字节数,并返回指向已分配内存位置的第一个字节的指针。 |
calloc | 此函数分配元素数组并将其初始化为零,并返回指向分配的内存位置的指针。 |
realloc | 此函数将修改先前分配的内存位置的大小。 |
free | 此功能将释放先前分配的内存位置。 |
内存区域
下图表示内存区。
所有程序指令,全局变量和静态变量都存储在称为永久存储区的存储区中。
局部变量存储在称为堆栈的内存区域中。
永久存储区和堆栈之间的可用存储区称为堆。
这是程序执行期间可用于动态分配的区域。
由于在函数和块中局部变量的创建和可移动,因此堆的大小在程序执行期间不断变化。
因此,我们遇到的一个常见问题是动态内存分配期间内存溢出。
当没有足够的内存空间用于分配时,上述内存分配函数将返回NULL。