用于分配空间的函数malloc、calloc、realloc
来源:互联网 发布:备孕前准备 知乎 编辑:程序博客网 时间:2024/06/05 10:27
malloc、calloc函数的实现实质原理是将可以用的内存块连接成一个链表。当用户调用malloc函数时,会沿着链表找到一块满足用户要求大小的内存块。然后有一个链表一分为二的过程,用户需要的分配给用户,不需要的返回链表上。当用户使用完空间后,用free()释放,被释放的空间会重新返还到链表上。但多次操作后,空闲内存块就会很零碎,如果这个时候,用户申请一块内存块,malloc函数就会申请延时,然后遍历所有空闲内存块,将小内存块连接大内存块,再分配给用户。
malloc、realloc、calloc的作用、用法和区别(举例都用分配一块20个字节,存放字符型常量的例子):
malloc函数是在内存的动态存储区域(堆空间)中分配一块长度为size的字节连续区域。
调用公式为(char *)malloc(sizeof(char) * 20);
calloc函数与malloc函数相似,都是分配一块内存给指针。形参为参数个数和申请地址的单位元素长度。
调用公式为(char * )calloc(20,sizeof(char));
realloc函数是给一个已经分配了地址的指针重新分配空间;
加入我们已经定义过了一个名为ptr的指针,并用malloc或calloc函数进行过了空间分配。
调用公式为(char *)realloc(ptr,sizeof(char)* 50);
malloc、calloc、realloc函数之间的区别:
首先是realloc,它与其他两个函数不同,是给已经分配了空间的指针进行空间再分配。也可以理解为指针地址的拓展和缩小。如果重新分配的空间比原空间要大,数据不会发生变化。但如果重新分配的空间比原空间小,会发生数据丢失。而且拓展或缩小所分配的空间可能不是同一块空间。
malloc函数不会对分配的内存空间进行初始化,但calloc会。使用malloc函数时,刚开始分配的的值时是空地址,但执行过一段时间以后,所分配的空间中会出现各种各样的数据。
calloc函数会对分配的内存进行初始化,字符等初始化所有数据初始化为0;指针变量分配的内存会被初始化成地址NULL,整数的初始化为浮点型。
- 用于分配空间的函数malloc、calloc、realloc
- 分配空间的三种函数——malloc,calloc,realloc
- malloc,calloc,realloc内存分配函数的区别
- malloc、calloc、realloc、alloca几个内存分配函数的区别
- 内存分配函数malloc、calloc、realloc的区别
- 内存分配函数:malloc/calloc/realloc的区别
- 内存分配函数:realloc、malloc、calloc不同
- 动态内存分配函数malloc,calloc,realloc
- 内存分配函数 :malloc,calloc,realloc
- 内存分配函数malloc calloc realloc
- malloc()/calloc()、realloc函数
- malloc,calloc,realloc函数
- 内存空间分配,以及malloc、calloc、realloc、alloca、realloc的区别
- malloc(),calloc()和realloc()函数的区别
- calloc(), malloc(), realloc(), alloca()函数的区别
- realloc malloc calloc 三个函数的区别
- realloc、malloc、以及calloc函数的区别
- realloc、malloc、以及calloc函数的区别
- 设计模式详解(总纲)
- 相对布局和网格布局
- Hibernate 查询
- 《Sphinx权威指南》 - Sphinx入门
- Java IO
- 用于分配空间的函数malloc、calloc、realloc
- 各位好啊 加入了CSDN这个大家庭啊
- java运行jar文件中某个类
- 在python中,获取用户输入信息
- solr5.5.0 中文分词<三>
- HTML5 FileReader 读取txt文件
- ASP.NET中引用JS不能调用JQuery问题 解决
- 数据库____操作表中数据
- Spring配置项<context:annotation-config/>解释说明