C++内存管理

Posted by 川川的博客 on April 18, 2025

内存管理

操作系统内存管理:

1.分段。不同用途的数据放到不同的区域,就像划分不同的地域

2.分页。

image-20250524223933882

image-20250524224215276

虚拟地址-》物理地址映射

一个你写的程序是如何在Linux上编译后运行起来的?

image-20250524230147616

1.C语言中动态内存管理方式

malloc /calloc/realloc和free

calloc初始化空间并初始化为零

2.C++动态内存管理

image-20250524230840412

new和delete的意义何在?

​ 内置类型不会初始化都是随机值,自定义类型才会初始化

针对内置类型是一样的作用,malloc和new,free和delete

针对自定义类型:

​ new 申请空间+调用构造函数

​ delete 释放空间+调用析构函数

image-20250524231341541

3.operator new和operator delete函数

image-20250525222102559

  • 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

image-20250525225218491

5.内存泄漏

1.内存申请了忘记释放

危害

  • 长期运行的程序,出现内存泄露危害很大

如何申请一个4G内存?

切换x64编译器,进程地址空间大小2^64

size_t n = 2;

void* p = new char[n * 1024 * 1024 * 1024]