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 ...
随机推荐
- Java 内省机制
一.内省 内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法.JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的 ...
- JSTL入门
在页面最上方引入 -------------------- if语句 8}"> b的值大于8 --------------------- foreach语句 i的值是:${i}
- Android 中Java和JavaScript交互入门
如何实现JavaScript 和java 交互 实现Java和js交互十分便捷.通常只需要以下几步. WebView开启JavaScript脚本执行 WebView设置供JavaScript调用的交互 ...
- input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
input输入框在获得或失去焦点时隐藏或显示文字,这样的焦点效果想必很多朋友在填写form表格的时候都曾见识过吧,本文使用jquery实现以下,感兴趣的朋友可以参考下哈 大家可以看效果图的搜索输入框, ...
- 查看、修改oracle字符集,查看oracle版本
1.查看数据库字符集 数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集. 客户端字符集环境select * fr ...
- 三种客户端访问wcf服务端的方法 C#
原文 http://blog.csdn.net/zlj002/article/details/7914556 string jsonstr = String.Empty; string url = & ...
- webp 初探
WebP是Google新推出的影像技术,它可让网页图档有效进行压缩,同时又不影响图片格式兼容与实际清晰度,进而让整体网页下载速度加快. 如果我们能将其应用在现有的图片上,将可以进一步减少图片大小加快页 ...
- android -上传文件到服务器
android上传文件到服务器 重点:最好是设置好content-type这些参数的配置! package com.spring.sky.image.upload.network; ...
- android中 MediaStore提取缩略图和原始图像
android中 MediaStore提取缩略图和原始图像 . 欢迎转载:http://blog.csdn.net/djy1992/article/details/10005767 提取图像的Thum ...
- Oracle 11g RAC features
<一,> oracle 11g r2 RAC提供了以下功能: 高可用:shared-everything 模式保证了单节点的故障不会停止服务,集群中的其他节点将快速接管 可扩展性:多节点分 ...