1.malloc
2.free
3.calloc
分配所需的内存空间,并返回一个(一组)指向它(它们)的指针。
malloc和calloc之间的不同点是,malloc不会设置内存为0,而calloc会设置分配的内存为0
4.realloc
更改已经配置的内存空间,即更改由malloc函数分配的内存空间的大小。
void *realloc(void *ptr,size_t size) //ptr指向堆块或者为空
- 如果重新申请的大小大于申请内存的大小,且当前内存段后面有需要的内存空间,则直接扩展这段内存空间,
realloc()将返回原指针。 - 如果重新申请的大小大于申请内存的大小,且当前内存段后面的空闲字节不够,那么就使用堆中的第一个能够满足这一要求的内存块,将目前的数据复制到新的位置,并将原来的数据块释放掉,返回新的内存块位置,相当于
free()+malloc()。 - 如果重新申请的大小小于申请内存的大小,堆块会直接缩小,被削减的内存会释放(直接释放到
top chunk中)。 - 如果传入了一个空的堆块地址,但是
size不是0,就相当于malloc() - 如果传入了一个正常的堆块地址,但是
size是0,那么就相当于free() - 如果申请失败,将返回
NULL,此时,原来的指针仍然有效。