1. void* malloc(size_t size); //size_t size表示的是内存的总大小
a、malloc所分配的是一块连续的内存,以字节为单位,并且不带任何信息
b、malloc实际分配的内存可能比请求的稍微多一点(什么原因呢?思考一下,我将在下面进行解答)
2.void free(void* pointer)
free用于将动态的内存归还给系统
3.void* calloc(size_t num,size_t size); //size_t num代表的是元素的总个数,size_t size代表元素的数据类型
a、calloc的参数代表所返回内存的类型信息
b、calloc将会返回内存的类型信息
4.void* realloc(void* pointer,size_t new_size); //pointer代表的是之前申请动态内存的地址,size_t new_size新申请的内存大小
动态内存重置
总结:
1.动态内存分配是在堆中进行分配
2.malloc用于单纯的从堆中申请固定字节大小的内存
3.calloc能以内存大小为单位申请内存呢并初始化为0
4.realloc用于重置内存大小
关于上面为什么动态内存申请比我们申请的内存要稍微多一点的解答?
由于动态内存的申请是在堆中进行,系统在接受应答指令时,会查找空闲链表节点,
系统会查找与我们申请的内存大小最接近的空闲链表的节点。例如:我们申请的空间
为4个字节,而空闲链表的节点有内存空间为5个字节,还有7个字节的,这时候系统
将会把5个字节的作为我们申请内存的大小。