首页 > 系统相关 >C++内存管理

C++内存管理

时间:2023-09-26 22:56:44浏览次数:37  
标签:管理 C++ 链表 内存 operator new allocator delete

  • primitives(基本工具)

    • 对比

      • malloc,free

        • 不可重载

        • c函数

      • new,delete

        • 不可重载

        • C++表达式

      • ::operator new(),::operator delete()

        • 可重载

        • C++函数

      • allocator<T>::allocate(),allocator<T>::deallocate()

        • 可自由设计并以之搭配任何容器

        • C++标准库

    • new

      • 1.operator new(sizeof())

      • 2.构造函数,注:自己使用时不能直接调用构造函数

    • delete

      • 1.析构函数

      • 2.operator delete(pc)

    • array new,array delete

      • new []

      • delete []

        • 不加[]的影响

          • 1.class内不带指针可能没影响

          • 2.class内带指针会内存泄露

    • placement new

      • new(p)Complex(1,2)

        • 1operator new(sizeof(Complex),p):不分配内存

        • 2构造函数

    • 重载

      • 类外::oprator new/delete

      • 类内oparator new/delete(本质是静态的)

    • Per-class allocator

      • 重载类内oparator new/delete

      • operator new:内存池,每个单独的类内会多一根指针,链表

      • operator delete:将回收的内存加到自由链表的前端

    • static allocator

      • 把内存分配的过程写到一个allocator类中,通用

    • macro for static allocator

      • static allocator 的宏版本

    • new handler

      • typedef void(*new_handler)()

      • new_handler set_new_handler(new_handler p) throw();

        • 没有内存能被分配,不断调用

  • std::allocator

    • G2.9 std::alloc 运行模式

    • 128bytes以内

      • free_list[16]:16条自由链表,第一条8字节开始,以后每条上的块多8字节,第n条,n=申请大小/8-1;

      • 开辟内存时,内存池不够时,开辟20*该条链表上块大小+20*该条链表上块大小(内存池)+(RoundUp(累计量>>4)),有剩余时,从内存池,最多切20个(即使内存池容量充足)

      • 申请时,内存池剩余连一块也满足不了,为碎片,先将其挂在大小符合的自由链表下,再开辟内存

      • 当内存池不足,同时系统内存也不足时,alloc从手中资源最接近申请大小的自由链表中取出一块回填pool

      • 一条链表上的一块,包含union,嵌入式指针,4个字节

    • 大于128bytes

      • 直接malloc

>>>>>>>(侯捷版笔记)

标签:管理,C++,链表,内存,operator,new,allocator,delete
From: https://www.cnblogs.com/Zhaolongtao/p/17731476.html

相关文章

  • 包管理工具-Yarn
    yarn简介yarn官网:https://www.yarnpkg.com/zh-Hans/yarn是由Facebook、Google、Exponent和Tilde联合推出了一个新的JS包管理工具,它仍然使用npm的registry,不过提供了全新CLI来对包进行管理过去,yarn的出现极大的抢夺了npm的市场,甚至有人戏言,npm只剩下一个regi......
  • C++ 采用read()和write()读写二进制文件
    以文本形式读写文件和以二进制形式读写文件的区别,并掌握了用重载的>>和<<运算符实现以文本形式读写文件。在此基础上,本节继续讲解如何以二进制形式读写文件。举个例子,现在要做一个学籍管理程序,其中一个重要的工作就是记录学生的学号、姓名、年龄等信息。这意味着,我们需要用一个......
  • C++知识点
    以文本形式读写文件和以二进制形式读写文件的区别,并掌握了用重载的>>和<<运算符实现以文本形式读写文件。在此基础上,本节继续讲解如何以二进制形式读写文件。举个例子,现在要做一个学籍管理程序,其中一个重要的工作就是记录学生的学号、姓名、年龄等信息。这意味着,我们需要用一个......
  • openGauss学习笔记-80 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT性能基
    openGauss学习笔记-80openGauss数据库管理-内存优化表MOT管理-内存表特性-MOT性能基准本节介绍了openGauss内存优化表(Memory-OptimizedTable,MOT)的MOT性能基准。80MOT性能基准我们的性能测试是基于业界和学术界通用的TPC-C基准。测试使用了BenchmarkSQL(请参见MOT样例TPC-C基......
  • openGauss学习笔记-81 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT使用概
    openGauss学习笔记-81openGauss数据库管理-内存优化表MOT管理-内存表特性-MOT使用概述MOT作为openGauss的一部分自动部署。有关如何计算和规划所需的内存和存储资源以维持工作负载的说明,请参阅MOT准备。参考MOT部署了解MOT中所有的配置,以及服务器优化的非必须选项。使用MOT的方......
  • CentOS软件包管理
    一:CentOS中RPM软件包管理方式概述Linux系统中的很多软件除了提供软件本身的程序功能之外,还需要提供该程序使用的库和软件以及配置文件等。因此,在Linux中以软件包为单位处理这些集合。包的组成部分如下图所示:软件包管理就是安装或者卸载软件,还可以查看当前安装软件的信息以及软件之......
  • 基于边缘智能网关的储充一体电站管理方案
    在“2030碳达峰,2060碳中和”的目标下,我国持续加快推进能源转型,扩大新能源占比,全国各地都在部署建设光伏、储能、新能源汽车充电等应用。随着新能源汽车的广泛普及,充电站、充电桩的需求快速增加,行业也诞生了“光伏+储能+充放”的综合能源站应用。 针对此类综合能源站的监测和管......
  • 视频融合平台EasyCVR如何使用视频监控系统搭建森林防火与人车管理系统解决方案
    安防视频监控平台EasyCVR是一个具有强大拓展性、灵活的视频能力和轻便部署的平台。它支持多种主流标准协议,包括国标GB28181、RTSP/Onvif、RTMP等,还可以支持厂家的私有协议和SDK接入,例如海康Ehome、海大宇等设备的SDK。该平台不仅拥有传统安防视频监控的功能,还具备接入AI智能分析的......
  • 电商必看!防关联浏览器在多店铺管理中的实际作用
    随着电商的迅速发展,如何有效管理多个店铺和账户成为许多卖家面临的挑战。为了应对账户关联和隐私泄露等问题,越来越多的电商大咖开始使用防关联浏览器。一、为什么电商大咖都在使用防关联浏览器?电商大咖之所以选择使用防关联浏览器,而不再使用普通的浏览器,主要是因为它提供了以下几个......
  • C++语言的设计和演化 电子书 pdf
    关注公众号:红宸笑。回复:电子书即可  本书是C++的设计者关于C++语言的最主要著作之一。作者综合性地论述了C++的发展历史,C++中各种重要机制的本质意义和设计背景,这些机制的基本用途和使用方法,讨论了C++所适合的应用领域及其未来的发展前景。全书共18章,分两大部分,其中第1部......