库函数之malloc与new
发布日期:2021-05-10 06:26:28 浏览次数:22 分类:原创文章

本文共 625 字,大约阅读时间需要 2 分钟。

malloc与new的区别


从本质上来说,malloc(上具体实现可以参考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不依赖于头文件,就可以把new编译成目标代码(g++4.6.3会向目标中插入_Znwm这个函数,另外,编译器还会根据参数的类型,插入相应的构造函数)。


在使用上,malloc 和 new 至少有两个不同: new 返回指定类型的,并且可以自动计算所需要大小。而 malloc 则必须要由我们计算字节数,并且在返回后强行转换为实际类型的。另外有一点不能直接看出的区别是,malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。除了分配及最后释放的方法不一样以外,通过malloc或new得到,在其它操作上保持一致。


malloc与free对应,new与delete对应。


 


 

上一篇:库函数之sprintf与snprintf
下一篇:库函数之malloc与calloc

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月21日 20时46分06秒