动态内存是指在堆上分配的内存,而静态内存是指在栈上分配的内存。栈上分配的内存是由系统分配和释放的,空间有限,在复合语句或函数运行结束后就会被系统自动释放而堆上分配的内存则不会有这个问题。
本期,我们将讲解malloc、calloc、realloc以及free函数。
这是个动态内存分配函数的头文件都是 <stdlib.h>。
c语言中动态分配内存的函数,可能有些初学c语言的人不免要问了:我们为什么要通过函数来实现动态分配内存呢?
首先让我们熟悉一下计算机的内存吧!在计算机的系统中大致有这四个内存区域:
1)栈:在栈里面储存一些我们定义的局部变量以及形参(形式参数);
2)字符常量区:主要是储存一些字符常量,比如:char *p=”hello world”;其中”hello world”就储存在字符常量区里面;
3)全局区:在全局区里储存一些全局变量和静态变量;
堆:堆主要是通过动态分配的储存空间,也就是我们接下需要讲的动态分配内存空间。
静态内存和动态内存的比较:
- 静态内存是有系统自动分配,由系统自动释放。 静态内存是在栈分配的。(例如:函数里的局部变量)
- 动态内存是由程序员手动分配,手动释放。 动态内存是在堆分配的。(例如:用C语言写链表时,需要自己对Node结点分配内存空间)
一、malloc 与free函数
void* **malloc( size_t ** size);
返回类型: void*,也就是说这个函数的可以返回所有类型的指针形式。只需要在开辟空间的时候进行强制类型转换一下即可。
函数参数:size_t size, 这个参数就是告诉这个函数,你需要开辟多少个字节的内存空间。
void free(void* memblock) ;