ISOC说明了3个用于存储空间动态分配的函数。
- malloc,分配指定字节数的存储区。此存储区中的初始值不确定。
- calloc,为指定数量指定长度的对象分配存储空间。该空间中的每一位(bit)都初始化为0.
- realloc,增加或减少以前分配区的长度。当增加长度时,可能需将以前分配区的内容移到另一个足够大的区域,以便在尾端提供增加的存储区,而新增区域内的初始值不确定。
#include <stdlib.h>
void *malloc(size_t size);
void *calloc(size_t nobj, size_t size);
void *realloc(void *ptr, size_t newsize);
void free(void *ptr);
这些分配例程通常用sbrk(2)系统调用实现。该系统调用扩充(或缩小)进程的堆。
虽然sbrk可以扩充或缩小进程的存储空间,但是大多数malloc和free的实现都不减小进程的存储空间。释放后的空间可供以后再分配,但将他们保持在malloc池中而不返回给内核。