动态内存管理1❤

动态内存管理1❤_第1张图片

前言:

c语言中的数据结构通常是固定的。例如一旦程序完成了编译,数组元素的数量就固定了。因为在编写程序的时候强制选择的大小,所以固定大小的数据结构可能出现问题。那么我们就需要动态存储分配,即在程序执行期间分配内存单元的能力。利用动态存储分配,可以动态存储分配,可以设计出能根据需要扩大的数据结构。

一:内存分配函数

1》:malloc

malloc函数——分配内存块。但是不对内存块进行初始化。

malloc
void* malloc (size_t size);
可以看出它的返回类型是void*,是因为malloc只知道申请多大的空间,但是不知道回放了什么类型的数据

malloc申请的空间是内存的堆区。可以参考下面的图片

动态内存管理1❤_第2张图片

 2》:calloc

calloc函数————分配内存块,并且对内存块进行清零。

calloc
void* calloc (size_t num, size_t size);
calloc函数为num个元素的数组分配空间,其中每个元素的长度是size个字节

 3》:realloc

realloc函数--------------调整先前分配的内存块大小

realloc
void* realloc (void* ptr, size_t size);
当数组分配完内存后,可能会发现数组过大或者过小。realloc函数就可以调整数组的大小使它更加合适需求。

注意:当调用realloc函数时,ptr必须指向先前通过malloc、calloc或者realloc的调用获得的内存块。其中的size表示内存块的新尺寸,新尺寸没有要求,按实际情况来规定尺寸。

其如果调整空间失败,会返回NULL.

如果调试空间成功,则有两种情况

1:在已经开辟好的空间后面,没有足够的空间,直接进行空间的扩大

在这种情况下,realloc函数会在内存的堆区重新找一个空间(满足新的空间的大小需求)

同时会把旧的数据拷贝新的空间,然后释放旧的空间,同时返回新的空间的起始地址

2:已经开辟好的空间后面,有足够的空间,直接进行扩大,扩大空间后,直接返回旧的空间的起始地址。

补充:free函数 使用free函数很简单,只需要简单地把指向不需要的指针传递给free函数就可以释放相应的地址了。free函数的实参必须时先前由内存分配函数返回的指针。

动态内存管理1❤_第3张图片

你可能感兴趣的:(开发语言,c语言)