内存管理
操作系统内存管理:
1.分段。不同用途的数据放到不同的区域,就像划分不同的地域
2.分页。
虚拟地址-》物理地址映射
一个你写的程序是如何在Linux上编译后运行起来的?
1.C语言中动态内存管理方式
malloc /calloc/realloc和free
calloc初始化空间并初始化为零
2.C++动态内存管理
new和delete的意义何在?
内置类型不会初始化都是随机值,自定义类型才会初始化
针对内置类型是一样的作用,malloc和new,free和delete
针对自定义类型:
new 申请空间+调用构造函数
delete 释放空间+调用析构函数
3.operator new和operator delete函数
- malloc
- operator new ==>malloc+失败抛异常
-
new ==>operator new申请空间 +构造函数定义这块空间
- free
- operator free == free
- delete ==>operator free +析构函数
size_t就是unsign
malloc和new区别
-
malloc是函数,new是操作符
-
malloc参数是字节数,返回值是void*, new后面跟的是申请对象的类型,返回值是类型的指针
-
new会调用构造函数,失败抛异常,malloc失败返回0
4.定位 new/replacement new
5.内存泄漏
1.内存申请了忘记释放
危害
- 长期运行的程序,出现内存泄露危害很大
如何申请一个4G内存?
切换x64编译器,进程地址空间大小2^64
size_t n = 2;
void* p = new char[n * 1024 * 1024 * 1024]