C++内存管理

在这里插入图片描述

  1. 栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。
  2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享内存,做进程间通信。(Linux课程如果没学到这块,现在只需要了解一下)
  3. 堆用于程序运行时动态内存分配,堆是可以上增长的。
  4. 数据段–存储全局数据和静态数据。
  5. 代码段–可执行的代码/只读常量。

C语言中的内存管理:

  • malloc:void *malloc(size_t n) 向堆上申请 n 个字节大小的空间
  • calloc:void *calloc(size_t num, size_t size) 堆上申请num个size大小的空间 ,并初始化为0
  • realloc:void *realloc(void *ptr, size_t size) 将ptr存储空间设置为size。返回值为新空间的地址
  • free:void free(void *ptr) 函数释放ptr指针指向的空间。

C++中的内存管理:
new,delete:
申请和释放单个元素的空间,使用new和delete操作符,申请和释放连续的空间,使用new[]和
delete[]。
注意:申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与free不会。
new和delete是用户进行动态内存申请和释放的操作符,operator new 和operator delete是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间。

实现原理:
内置类型:与malloc,free相似,new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且new在申请空间失败时会抛异常,malloc会返回NULL。
自定义类型:
new的原理:

  1. 调用operator new函数申请空间。
  2. 在申请的空间上执行构造函数,完成对象的构造。
    delete的原理:
  3. 在空间上执行析构函数,完成对象中资源的清理工作。
  4. 调用operator delete函数释放对象的空间。

内存泄漏:已经申请的空间忘记释放,失去了对这片空间的控制,造成资源的浪费,甚至导致程序的崩溃。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值