学习之第一周小结 malloc、calloc、realloc、free、new、delete函数应用
malloc()、free()、calloc()、realloc()、在头文件stdlib.h中,new和delete在C++的头文件iostream中
1、malloc()
原型:void *malloc(size_t size);
malloc的参数是需要分配的内存字节数。如果内存池中的可用内存可以满足这个需求,maollc就返回一个指
向被分配的内存块起始位置的指针(指针类型为void *)。如果,操作系统无法向malloc提供足够内存,malloc就返
回一个NULL指针。因此每个从malloc返回的指针都要进行检查,确保它并非NULL。
例如:int *p;
if((p=(int *)malloc(100))==NULL){printf("out of memory !");exit(1)}
//表示如果malloc成功从内存获取100个字节的连续空间,并将内存空间起始地址给p;否则将返回NULL并赋值给p;
2、calloc()
原型: void *calloc( size_t num_elements, size_t element_size);
calloc也用于分配内存。calloc的参数包括所需元素的数量和每个元素的字节数。除参数设置于malloc不同
外,calloc在分配内存时会自动将存储空间置初值0;
例如: int *p;
if((p=(int *)calloc(4,10))==NULL){printf("out of memory !");exit(1)}
//表示如果calloc成功从内存获取4*10个字节的连续空间并值初值0,则将起始地址给p;否则将返回NULL并赋值给p;
3、realloc()
原型:void realloc( void *ptr,size_t new_size)
realloc函数用于修改一个原先已经分配的内存的大小。第一个参数为需要改变内存大小的指针名,第二个参
数为新分配内存的大小。
使用这个函数,你可以使一块内存扩大或缩小。如果它用于扩大一个内存块,那么这块内存原先的内容依然
保留,新增的内存添加大原先内存块的后面。如果用于缩小一个内存块,该内存尾部的部分内存便被拿掉,剩余部分
内存的原先内容依然保留。
如果原先的内存块无法改变大小,realloc将分配另一块正确大小的内存,并把原先那块内存的内容复制到新
的块上。因此,在使用realloc之后,就不能再使用旧内存的指针,而是应该使用realloc所返回的新指针。 realloc
失败的时候,返回NULL。
若realloc的一个参数为NULL,那么他的行为就和malloc一样。若第二个参数为0,则效果等同于free()。
4、free()
原型:void free(void *ptr)
free函数用于释放内存。参数表示malloc、calloc、realloc返回的地址。若参数等于NULL,则free不会产生
任何效果。free函数无返回值。
5、new()
C++中动态内存创建new分为两个步骤:在堆里为对象分配内存(C++中的operator new具有内置的长度计算,
类型转换与安全检查);如果内存分配成功,则为该内存调用合适的构造函数进行初始化。new 实际上总以标准C中的
malloc()完成。
例如:int *q = new int;
int *r = new int(888);//申请内存放入888
6、同时delete operator也是以标准C中的free()完成。
delete operator也相应地分为两步:调用相应类的析构函数;释放内存。
例如:int *r = new int(888);
delete r;
使用原则:(1)不要用delete来释放不是new分配的内存
(2)不要使用new来释放同一内存两次
(3)如果在new表达式中使用[],必须在相应的delete表达式中也使用[]。如果在new[]表达式中不使用[],
一定不要在相应的delete表达式中使用[]。
分享到:
相关推荐
C中堆管理—浅谈malloc,calloc,realloc 函数之间的区别 详情:http://blog.csdn.net/fjb2080
个人总结各类博客和资料里关于malloc,calloc,realloc的对比
malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数malloc函数...
malloc()函数有一个参数,即要分配的内存空间的大小: void *malloc(size_t size); calloc()函数有两个参数,分别为元素的数目和每个元素的大小,这两个参数的乘积就是要分配的内存空间的大小。 void *calloc(size_t ...
1 ,malloc 与free 是C++/C 语言的标准库函数,new/delete 是C++ 的运算符。它们都可用于申请动态内存和释放内存。 2 ,对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要...
lwmem:用于具有内存限制的嵌入式系统的轻型动态内存管理器库。 它实现了malloc,calloc,realloc和free函数
Malloc 返回一块内存地址的指针,否则会返回空指针null,这里要注意的是,当内存不再使用的时候,用free()函数进行对内存的释放。 2.calloc 作 用:calloc()函数有两个参数,分别为元素的数目和每个元素...
C语言中 malloc、calloc、realloc的区别 (1)C语言跟内存分配方式 <1>从静态存储区域分配. 内存在程序编译的时候就... 程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放
Malloc()与free()是C++/C语言的标准库函数,new/delete是C++的运算符,它们都可用于申请和释放动态内存。
本文叙述了calloc和malloc用法的区别,函数malloc()和函数calloc()的主要区别是前者不能初始化所分配的内存空间,而后者能。
以下是对c语言中的malloc函数,realloc函数与calloc函数的区别以及它们之间的联系进行了介绍,需要的朋友可以过来参考下
my_malloc:自己动手写的malloc函数.希望对大家了解内存管理有所帮助
我使用系统mmap实现的libc malloc,realloc和free函数 特征 大小分段:将请求分为SMALL,MEDIUM和LARGE,对SMALL和MEDIUM请求使用预分配的区域 释放碎片空间以优化重用 Hexdump分配的内存功能 实现的功能: malloc-...
C语言的malloc和free函数.pdf
跟踪对 malloc、realloc 和 free 的调用 用法 可以像这样使用LD_PRELOAD加载共享对象 LD_PRELOAD=heap_trace.so ./executable 例子 heaptrace 将输出有关 malloc、realloc 和 free 调用的信息 父函数的地址或已解析...
在VC2008上实现malloc和free,内含注释以及图形解释
C++面试经常会问到关于malloc/free和new/delete的区别,网上有不同版本的解释,这里总结下并加上个人理解和使用。 两者相同点 1.都可以申请动态堆内存。 两者不同点 1.new/delete是C++的操作符,malloc/free是C/...
C/C++ 内存管理 malloc calloc free realloc
malloc/free和new/delete的区别 malloc/free是C/C++标准库的函数;new/delete是C++操作符。 malloc/free只是动态分配内存空间/释放空间;new/delete除了分配空间还会调用构造函数和析构函数进行初始化与清理资源。...