C/C++的内存管理
栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的
内存映射段(或叫共享区?)高校的I/O映射方式,用于装载一个共享的动态内存库。用户可使用共享内存,做进程间通信
堆用于程序运行时动态内存分配,堆是可以向上增长的
数据段 用于存储全局数据和静态数据
代码段 可执行代码/只读常量
C++的内存管理方式
通过new和delete操作符
ps:
申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用new[] 和delete[]
在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而构造函数不会
operator new和operator delete是系统提供的全局函数
从其底层实现可以得知:operator new 实际也是通过malloc来申请空间,如果malloc申请空间成功就直接返回,否则执行用户提供的空间不足应对措施,如果用户提供该措施就继续申请,否则就抛异常。operator delete 最终使通过free来释放空间的
内存泄漏
指因为疏忽或错误造成程序未能释放已经不能再使用的内存空间的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该内存的控制,因而造成了内存的浪费
危害:长期运行的程序出现内存泄漏,如操作系统行,后台服务等,出现内存泄漏会导致响应越来越慢,最终卡死