C++基础知识点整理笔记(四)

10. C++的内存管理

在C++中,内存被分成五个区:栈、堆、自由存储区、静态存储区、常量区

  • (一) 栈:存放函数的参数和局部变量,编译器自动分配和释放
  • (二) 堆:new关键字动态分配的内存,由程序员手动进行释放,否则程序结束后,由操作系统自动进行回收
  • (三) 自由存储区:由malloc分配的内存,和堆十分相似,由对应的free进行释放
  • (四) 全局/静态存储区:存放全局变量和静态变量
  • (五) 常量区:存放常量,不允许被修改

11. C++中内存泄漏的几种情况

内存泄漏是指己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。有以下几个原因:

  • 1)类的构造函数和析构函数中new和delete没有配套
  • 2)在释放对象数组时没有使用delete[],使用了delete
  • 3)没有将基类的析构函数定义为虚函数,当基类指针指向子类对象时,如果基类的析构函数不是virtual,那么子类的析构函数将不会被调用,子类的资源没有正确释放,因此造成内存泄露
  • 4)没有正确的清楚嵌套的对象指针

12. new、delete、malloc、free之间的关系

  • new/delete,malloc/free都是动态分配内存的方式;
  • new/delete是运算符,编译器保证调用构造和析构函数对对象进行初始化/析构,但是库函数malloc/free是库函数,不会执行构造/析构;
  • new会自动计算需分配的空间,malloc不行;
  • new是类型安全的,而malloc不是;
  • new返回指定类型指针,malloc返回void*指针,需要强制类型转换;
  • new可以被重载,malloc不能
  • new底层调用malloc函数分配内存,然后调用构造函数

13. delete和delete[]的区别

  • a) delete只会调用一次析构函数,而delete[]会调用每个成员的析构函数
  • b) 用new分配的内存用delete释放,用new[]分配的内存用delete[]释放

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静香是个程序媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值