C和C++中动态分配内存的区别
来源:互联网 发布:红猫网络加速 编辑:程序博客网 时间:2024/06/05 17:44
c是malloc和free,
c++是new和delete,(C++面向对象的)
区别如下:
(1)new、delete 是操作符,可以重载,只能在C++中使用。
(2)malloc、free是函数,可以覆盖,C、C++中都可以使用。
(3)new 可以调用对象的构造函数,对应的delete调用相应的析构函数。
(4)malloc仅仅分配内存,free仅仅回收内存,并不执行构造和析构函数。
(5)new、delete返回的是某种数据类型指针,malloc、free返回的是void指针。
关于区别更加详细的解释:
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
1、new 是c++中的操作符,malloc是c 中的一个函数
2、new 不止是分配内存,而且会调用类的构造函数,同理delete会调用类的析构函数,而malloc则只分配内存,不会进行初始化类成员的工作,同样free也不会调用析构函数
3、内存泄漏对于malloc或者new都可以检查出来的,区别在于new可以指明是那个文件的那一行,而malloc没有这些信息。
4、new可以认为是malloc加构造函数的执行。new出来的指针是直接带类型信息的,而malloc返回的都是void指针。
5、new和malloc虽然都是申请内存,但申请的位置不同,new的内存从free store分配,而malloc的内存从heap分配(详情请看ISO14882的内存管理部分),free store和heap很相似,都是动态内存,但是位置不同,这就是为什么new出来的内存不能通过free来释放的原因。不过微软编译器并没有很好的执行标准,很有可能把free store和heap混淆了,因此,free有时也可以。
6、delete时候不需要检查NULL,而free(NULL)那就麻烦大了。
new/delete的功能完全覆盖了malloc/free,C++不把malloc/free淘汰出局,是因为C++程序经常要调用C函数,而C程序只能用malloc/free管理动态内存。
至于困扰的java为什么没有这个机制:
java内存动态分配?Java虚拟机的内存区域Java中对象内存的分配是在Java虚拟机中进行的。
也就是说你在java中直接new一个对象就可以了,不需要去释放。
虚拟机里有垃圾回收,垃圾回收分full gc 和普通gc,这些想了解详细可以去查查资料。
java其实帮你完成了这些繁琐的过程,加速你的开发过程。
java本身的机制就是动态的内存分配,不需要手工管理的,可以有效的防止内存溢出。
- C和C++中动态分配内存,区别
- C和C++中动态分配内存,区别
- C和C++中动态分配内存的区别
- C与C++中动态分配与释放内存的区别
- C和C++中动态分配和释放内存的方式及其区别
- C中动态分配内存
- C中关于动态分配内存
- C语言中动态分配内存
- C语言中动态分配内存
- C语言中动态分配内存
- C和C++动态分配内存
- C语言的动态分配内存
- C和C++如何动态分配和释放内存,他们的区别是什么
- C和C++中动态分配内存、程序占用内存的种类
- C与C++动态分配,释放内存的区别
- C与C++动态分配,释放内存的区别
- C与C++动态分配,释放内存的区别
- C与C++动态分配,释放内存的区别
- 【linux驱动分析】之dm9000驱动分析(五):另外几个重要的结构体
- allocator 的使用方法
- MFC读写INI配置文件
- PMON failed to acquire latch, see PMON dump
- 【linux驱动分析】之dm9000驱动分析(六):dm9000_init和dm9000_probe的实现
- C和C++中动态分配内存的区别
- web.xml(7)_mime-mapping、welcome-file-list、error-page
- 执行远程服务器脚本
- ShowCurrentTime
- python编程问题...
- linuxproxy设置
- Java 实现视频转FLV,支持完成进度百分比
- PHP获取Cookie模拟登录CURL
- 第九周(例题)——课本例题的熟悉。