内存管理:

函数 描述
calloc()
malloc()
realloc()
free()
  • 必须检查 callocmallocrealloc 的返回值是否为 NULL,因为当内存不足时将返回 NULL

calloc()

// 动态分配 `num(数量) * size(字节)` 个字节的连续内存空间
void *calloc(size_t nitems, size_t size)

// 示例
char* ptr = (char *) calloc(10, sizeof(int));
  • 每个字节默认初始化为 0
  • 返回值是连续内存空间的起始地址(指针)

malloc()

// 动态分配 size 个字节的连续内存空间
void *malloc(size_t size);
  • 内存空间未被初始化
  • 返回值是连续内存空间的起始地址(指针)

realloc()

// 调整之前调用 malloc 或 calloc 时所分配(由 ptr 所指向的)的内存的大小
void *realloc(void *ptr, size_t new_size)
  • 缩容(new_size < size):释放末尾 size - new_size 字节大小的内存空间
  • 扩容(new_size > size)
    • 如果原内存空间后面有足够内存,直接在尾部新增 new_size - size 字节大小的内存
    • 如果原内存空间后面无足够内存,重新分配一块 new_size 字节大小的内存空间,并将原内存中的数据复制到新内存

free()

// 释放之前调用 calloc、malloc 或 realloc 时所分配的内存空间
void free(void *ptr);
  • 参数要么是 NULL,要么是 malloc()calloc()realloc() 返回的指针

参考

results matching ""

    No results matching ""