文章前言:
本文主要介绍C语言中的动态内存管理,主要是4个与之相关的函数。另外,我认为柔性数组也可以归于动态管理中,但其是与结构体密切相关的,建议可以先了解结构体再看柔性数组。
动态内存管理:
为什么会有动态内存管理?
在正式介绍动态内存管理之前,我们应该要先想想为什么需要它?
请看下列代码:
//通讯录
typedef struct person
{
char name[20];
char sex[5];
int age;
char num[15];
char adrs[30];
}person;
int main()
{
//创立通讯录
person A[10] = {
0};
}
联合实际上看有没有看出什么问题?
有,而且是很基础的问题——通讯录里面的可以添加的人物太少了!
但有人会说,那直接在代码里初始化一个比较大的数不就可以解决这个问题了么?
很好,但如果这么想的话,我一旦设为1000,甚至1000000,结果在某一段时间用的不过几十余人而已,那又会造成大量的内存浪费,这产生了一个新问题。
因此,我们的主角——动态内存管理 响亮登场!
动态内存分布:
在前言我已经提到动态内存管理是与四个函数有着密切联系,这四个函数的其中三个可以在堆中创建变量。我先给出“内存图”,看看动态内存管理函数在什么地方上大方异彩。
上图是C语言的大概内存分布图,可以看见,动态内存是在堆区上开辟的。
在继续往下介绍前,各位可以先简单想想:动态内存的开辟有什么弊端?