malloc怎么用( 五 )


由于内部数据类型的“对象”没有构造与析构的过程,对它们而言malloc/free和new/delete是等价的 。既然new/delete的功能完全覆盖了malloc/free,为什么C++不把malloc/free淘汰出局呢?这是因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存 。
如果用free释放“new创建的动态对象”,那么该对象因无法执行析构函数而可能导致程序出错 。如果用delete释放“malloc申请的动态内存”,理论上讲程序不会出错,但是该程序的可读性很差 。
所以new/delete必须配对使用,malloc/free也一样 。
7.malloc是什么意思呢1. malloc函数向系统申请分配指定size个字节的内存空间 。返回类型是 void* 类型 。void* 表示未确定类型的指针 。C,C++规定,void* 类型可以强制转换为任何其它类型的指针 。
2. 函数声明:void *malloc(size_t size),void* 表示未确定类型的指针,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据 。
3. malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表 。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块 。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节) 。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上 。
8.malloc怎么用呢原型extern void *malloc(unsigned int num_bytes);头文件#include 功能分配长度为num_bytes字节的内存块返回值如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL 。
当内存不再使用时,应使用free()函数将内存块释放 。函数返回的指针一定要适当对齐,使其可以用于任何数据对象 。
说明关于该函数的原型,在以前malloc返回的是char型指针,新的ANSIC标准规定,该函数返回为void型指针,因此必要时要进行类型转换 。名称解释malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存 。
相关函数calloc、realloc、free、_alloca2函数声明编辑全名void *malloc(size_t size);备注void* 表示未确定类型的指针,void *可以指向任何类型的数据,更明确的说是指申请内存空间时还不知道用户是用这段空间来存储什么类型的数据(比如是char还是int或者 。)3与new的区别编辑从本质上来说,malloc(Linux上具体实现可以参考man malloc,glibc通过brk()&mmap()实现)是libc里面实现的一个函数,如果在source code中没有直接或者间接include过stdlib.h,那么gcc就会报出error:'malloc' was not declared in this scope 。
如果生成了目标文件(假定动态链接malloc),如果运行平台上没有libc(Linux平台,手动指定LD_LIBRARY_PATH到一个空目录即可),或者libc中没有malloc函数,那么会在运行时(Run-time)出错 。new则不然,是c++的关键字,它本身不是函数 。
new不依赖于头文件,c++编译器就可以把new编译成目标代码(g++4.6.3会向目标中插入_Znwm这个函数,另外,编译器还会根据参数的类型,插入相应的构造函数) 。在使用上,malloc 和 new 至少有两个不同: new 返回指定类型的指针,并且可以自动计算所需要大小 。
比如:int*p;p=new int;//返回类型为int*类型(整数型指针),分配大小为sizeof(int)或:int*parr;parr=new int[100];//返回类型为int*类型(整数型指针),分配大小为sizeof(int)*100;而 malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的指针 。int*p;p=(int*)malloc(sizeof(int)*128);//分配128个(可根据实际需要替换该数值)整型存储单元,//并将这128个连续的整型存储单元的首地址存储到指针变量p中double*pd=(double*)malloc(sizeof(double)*12);//分配12个double型存储单元,//并将首地址存储到指针变量pd中第一、malloc 函数返回的是 void * 类型 。