栈区:
局部变量 函数的形式参数
堆区:
动态内存分配 malloc,free,calloc,realloc
静态区:
全局变量,静态变量,statint
#include <stdlib.h> malloc,free的头文件
返回类型void*
向内存申请空间
malloc 开辟空间
malloc(空间大小值 * sizeof())
当动态申请的空间不再使用的时候
就应当还给操作系统
free(p);
free释放空间
释放后应把p置为NULL(空指针),防止内存空间非法访问
calloc
向内存申请空间,并把空间的每个字节初始化0
calloc(空间大小值, sizeof(类型)
函数返回类型void*
realloc使用注意事项:
1.如果p指向的空间之后有足够的内存空间可以追加,这直接追加,后返回p;
2.如果p指向的空间之后没有足够的内存空间可以追加,则realloc函数就重新找到一个新的内存区域开辟一块满足需求的空间,并且把原来内存中的数据拷贝回来,释放原来的内存空间。
3.得用一个新的变量来接收realloc函数的返回值。
柔性数组
未知大小的-柔性数组成员-数组的大小是可以调整的。
特点:
1.结构中的柔性数组成员前面必须至少一个其他成员。
2.sizeof返回的这种结构大小不包括柔性数组的内存。
3.包含柔性数组成员结构用malloc()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。
好处:
1.方便内存释放
2.有利于访问速度