动态内存分配

1. malloc和free

malloc和free,分别用于执行动态内存分配和释放。
这些函数维护一个可用内存池,当一个程序另外需要一些内存时,他就调用malloc函数,malloc从内存池中提取一块合适的内存,并向该程序返回一个指向这块内存的指针。这块内存并没有以任何方式进行初始化。如果对这块内存进行初始化非常重要,你要么自己动手进行初始化,要么使用calloc函数。

函数原型:

      #include <stdlib.h>
       void *malloc(size_t size);
       void free(void *ptr);

malloc的参数就是需要分配的字节数,如果内存池中的可用内存可以满足这个需求,malloc就返回一个指向被分配的内存块起始位置的指针。
malloc分配的一块连续的内存。如果分配失败则函数返回NULL。

2.calloc和realloc

函数原型:

       void *calloc(size_t nmemb, size_t size);
       void *realloc(void *ptr, size_t size);

calloc也用于内存分配。
malloc和calloc之间主要区别是后者返回指向内存指针之前把它初始化为0

calloc和malloc之间另一个较小的区别是他们请求内存数量的方式不同。calloc的参数包括所需元素 的数量和每个元素的字节数。根据这些值,它能够计算出总共需要分配的内存数

realloc函数用于修改一个原先已经分配的内存块大小。使用这个函数,你可以使一块内存扩大或缩小。如果它用于扩大一个内存块,那么这块内存原先的内容依然保留,新增加的内存添加到原先内存块的后面,新内存并未以任何方式进行初始化。如果它用于缩小一个内存块,该内存块尾部的部分便被拿掉,剩余部分内存的原先内存依然保留。如果原先的内存块无法改变大小,realloc将分配一块正确大小的内存,并把原先内存的内存复制到新块上,因此,在使用realloc之后,你就不能再使用指向旧内存的指针,而是应该改用realloc所返回的新指针。如果realloc函数的第一个参数是NULL,那么它等同于malloc

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 逻辑上的分区 栈区 堆区 静态区 常量区 代码区 代码区,常量区,静态区,堆区,栈区这个排列顺序按照地址由小到大排...
    MathCat阅读 632评论 1 0
  • 1. 动态内存分配的意义 (1)C语言中的一切操作都是基于内存的(2) 变量和数组都是内存的别名 内存分配由编译器...
    编程半岛阅读 624评论 0 0
  • 为什么使用动态内存分配 当你声明数组时,你必须使用一个编译时常量来指定数组的长度。但是,数组的长度常常在运行时才能...
    d9fc24a0c9a9阅读 2,402评论 0 0
  • 1. malloc()函数 1.1 malloc的全称是memory allocation,中文叫动态内存分配。 ...
    Pitfalls阅读 2,076评论 0 5
  • C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是...
    一生信仰阅读 1,204评论 0 2