malloc、calloc、realloc三者的差别
1、malloc
作用:分配内存块
原型:void *malloc(size_t size);size表示要分配的字节数
返回值:返回一个指向所分配空间的void指针,假设没有足够的内存可用,则返回NULL。
假设要返回一个指向特定类型的指针,则在返回值上用一个类型转换。比如:
char* p;
p=(char*)malloc(20);
假设size是0,则malloc在堆中分配一个长度为0的项,而且返回一个指向那项的有效指针。比如:
int *p1=(int*)malloc(0) //ok,p1!=NULL
我们通常要检查malloc返回的值,即使须要分配的内存块很小。
由于校准和维护信息的原因,所分配的内存可能比size bytes要大。
2、calloc
作用:在内存中分配一个元素被初始化为0的数组。
原型:void *calloc(size_t num,size_t size);num表示元素的个数,size表示每一个元素的大小。
返回值:返回一个指向所分配空间的void指针。
假设要返回一个指向特定类型的指针,则在返回值上用一个类型转换。比如:
char* p;
p=(char*)calloc(20,sizeof(char));
3、realloc
作用:又一次分配内存块
原型:void *realloc(void* memblock,size_t size);memblock指向原先分配的内存块,size表示新的内存块的字节大小。
返回值:返回一个指向又一次分配(可能移动了)的内存块的大小。比如:
char* p;
p=(char*)malloc(sizeof(char)*20);
p=(char*)realloc(p,sizeof(char)*40);
假设要返回一个指向特定类型的指针,则在返回值上用一个类型转换。
假设size是0而且缓冲区參数不是NULL,或者没有足够可用的内存去扩展给定的大小,那么将返回NULL。对于前者,原先的内存将被释放,对于后者,原先的内存将保持不变。
假设memblock是NULL,那么realloc就和malloc的行为一样分配一个新的size字节大小的块。假设memblock不是NULL,那么它应该是一个早先由malloc或者realloc返回的指针。比如:
int *p3=(int*)realloc(NULL,10*sizeof(int));//ok,p3!=NULL
因为新的内存块可能在一个新的内存位置,所以由realloc返回的指针不能保证和所传递的memblock是同一个指针。
參数size给出了新的内存块的大小,以字节为单位。块的内容保持不变直到新的和旧的块的大小变小,尽管新的内存块可能在一个不同的位置。
malloc、calloc、realloc三者的差别的更多相关文章
- malloc,calloc,realloc三者的区别
malloc,calloc,realloc三者都可以运用与动态分配数组. malloc:用malloc必须要自己初始化,可以用memset(arr,0,cnt*sizeof(int)) calloc: ...
- C:malloc/calloc/realloc/alloca内存分配函数
原文地址:http://www.cnblogs.com/3me-linux/p/3962152.html calloc(), malloc(), realloc(), free(),alloca() ...
- malloc/calloc/realloc/alloca内存分配函数
calloc(), malloc(), realloc(), free(),alloca() 内存区域可以分为栈.堆.静态存储区和常量存储区,局部变量,函数形参,临时变量都是在栈上获得内存的,它们获取 ...
- C语言 malloc calloc realloc alloc 在分配内存时的 区别
malloc : 向堆申请分配内存,不初始化 calloc : 向堆申请分配内存,初始化为0 realloc: 向堆申请分配内存,可调整大小 alloc : 向栈申请内存,不需手动释放
- malloc calloc realloc,new区别联系以及什么时候用
三个函数的申明分别是:void* realloc(void* ptr, unsigned newsize);void* malloc(unsigned size);void* calloc(size_ ...
- C++malloc,calloc,realloc,free函数
在进行C/c++编程的时候,需要程序员对内存的了解比较清楚,经常需要操作的内存可分为下面几个类别: 1.堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等, ...
- malloc calloc realloc 区别
(1)C语言跟内存分配方式 <1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2> ...
- malloc calloc realloc
三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(si ...
- malloc,calloc,realloc区别
malloc:memory allocation calloc:The 'c' indicates 'cleared' realloc:The realloc() function changes t ...
随机推荐
- Linux命令之修改主机名
ubuntu永久修改主机名 1.查看主机名 在Ubuntu系统中,快速查看主机名有多种方法: 其一,打开一个GNOME终端窗口,在命令提示符中可以看到主机名,主机名通常位于“@”符号后: 其二,在终端 ...
- Hibernate学习
一.Hibernate与触发器协同工作 Hibernate与数据库中的触发器协同工作,会造成两类问题 ----触发器使Session的缓存中的持久化对象与数据库中对应的数据不一致:触发器运行在数据库中 ...
- Application(basic)----Easyui
一,效果图. 二,源代码. <!DOCTYPE html><html><head> <meta charset="UTF-8"> & ...
- hadoop笔记之hdfs
1.HDFS设计基础与目标 1.HDFS设计基础与目标 (1)硬件错误是常态,因此需要冗余. (2)流式数据访问.即数据批量读取而非随机读写,Hadoop擅长做的是数据分析而不是事务处理. (3)大规 ...
- Mybatis的ResultMap的使用(转)
本篇文章通过一个实际工作中遇到的例子开始吧: 工程使用Spring+Mybatis+Mysql开发.具体的业务逻辑很重,对象之间一层一层的嵌套.和数据库表对应的是大量的model类,而和前端交互的是V ...
- 【Perl学习笔记】2. perl中的bless理解
bless有两个参数:对象的引用.类的名称. 类的名称是一个字符串,代表了类的类型信息,这是理解bless的关键. 所谓bless就是把 类型信息 赋予 实例变量. 程序包括5个文件:person.p ...
- java之Set源代码浅析
Set的接口和实现类是最简单的,说它简单原因是由于它的实现都是基于实际的map实现的. 如 hashSet 基于hashMap,TreeSet 基于TreeMap,CopyOnWriteArraySe ...
- Foundation 框架 NSFileManager,NSData 简单的文件操作
一.简单展示NSFileManager的使用 #import <Foundation/Foundation.h> int main(int argc, const char * argv[ ...
- <精华篇>:iOS视频大全-持续更新
注意:新浪微博分享的资料和简书分享的资料,略有不同! 小码哥swift3.0版 斗鱼项目视频:点击下载 iOS开发25个项目实战:点击下载 2016PHP全套下载:点击下载 黑马刀哥iOS视频精选 ...
- Assertion failure in -[UIView layoutSublayersOfLayer:]
Assertion failure in -[UIView layoutSublayersOfLayer:], /SourceCache/UIKit/UIKit-2935.137/UIView.m:8 ...