做一小说网站要花多钱海报设计兼职平台
本节目标
一、C/C++内存分布
二、C语言中动态内存管理方式
三、C++中动态内存管理
四、operator new与operator delete函数
五、new和delete的实现原理
六、定位new表达式(placement-new)
七、常见面试题
一、C/C++内存分布
- 一个程序占用的内存主要有以下几部分
 - 栈区(stack)编译器自动分配与释放,存放运行时函数分配的局部变量,函数参数,返回数据,返回地址等,类似与数据结构里面的栈
 - 堆区(heap)一般由程序员进行分配,若没有释放,可能导致内存泄露
 - 全局区(静态区static)存放全局变量,静态数据,常量,程序结束后由系统释放,全局区又分为已初始化全局区和未初始化全局区,未初始化的放一边,已初始化的放一边
 - 常量区(文字常量区)存放常量字符串 程序结束后系统释放
 - 代码区(存放二进制代码)存放函数体等二进制代码
 

二、C语言中动态内存管理方式
- 四个函数: malloc , calloc , realloc , free
 - 1.
 - malloc 动态开辟一块连续的空间,自己决定开辟多少
 

- malloc底层使用brk和mmap函数实现的,当开辟空间小于128k时用brk,大于128k时用mmap
 - malloc是从堆中获取空间,当收到申请空间的申请时,操作系统中有一个记录空闲内存地址的链表,此时会遍历此链表,寻找第一个已释放,且空间大于所申请空间的堆结点,将该节点删除,该节点空间给新程序
 - 用法:

 - 2.
 - calloc 开辟空间同时初始化 等于malloc+memset
 - 用法:

 - 3.
 - realloc 对开辟的空间大小进行修改
 - 用法:

 - 4.
 - free 释放开辟空间
 - 用法:

 - 相关面试题:
 - malloc/calloc/realloc区别?
 - malloc的实现原理?
 
三、C++内存管理方式
C语言内存管理方式可以继续在C++中使用,但有些地方就有点无能为力,而且使用起来有些麻烦,因此C++有自己的内存管理方式,通过new和delete操作符来管理动态内存
1.new/delete操作内置类型
- new 跟 malloc 类似
 
- delete 跟 free 类似
 
- 注意:释放多空间要加【】
 
- 注意:申请和释放单个空间,使用new 和 delete, 申请和释放多个空间,使用new[]和delete[]
 
2.new和delete操作自定义类型
- 用new创建一个新类对象,跟malloc不同的是,new还会调用类的构造函数
 - 用delete删除的话,则会调用类的析构函数
 - malloc跟free都不会调用构造函数和析构函数
 
四、operator new与operator delete函数(重要点进行讲解)




- 总结:
 - malloc 申请空间
 - operator new 申请空间+报错
 - new 申请空间+报错+初始化
 - new底层用的operator new, operator new 底层用的malloc
 
五、new和delete的实现原理
1.内置类型
2.自定义类型
六、定位new表达式(placement-new)了解
- 定位new表达式是在已分配的原始内存空间中调用构造函数初始化一个对象
 - 使用格式:
 
- 使用场景:
 
- 使用例子:
 
七、常见面试题
- 1.什么是内存泄露?内存泄露的危害?
 
- 2.内存泄露分类?(了解)
 
- 3.如何检测内存泄露?(了解)
 


- 4.如何避免内存泄露?
 


