ISOC说明了3个用于存储空间动态分配的函数。

  1. malloc,分配指定字节数的存储区。此存储区中的初始值不确定。
  2. calloc,为指定数量指定长度的对象分配存储空间。该空间中的每一位(bit)都初始化为0.
  3. 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池中而不返回给内核。

results matching ""

    No results matching ""