7: 分配器

文章目录

  • operator new () 和 malloc()
  • stl 中allocator的使用
    • allocators 内部实现
      • vc的分配器 并没有太多的技巧可言
      • 下面是BC5的stl 设计
      • GCC的allocators
        • 2.9版本GCC使用的allocator是什么?
        • 这里面cookie的作用
    • 4.9版本的GCC allocator

operator new () 和 malloc()

所有分配内存的底层 基本都会分配到malloc() malloc再去根据系统去调用具体的系统调用函数

下面的图可以看到 operator new 里面也是封装的malloc()的函数调用
在这里插入图片描述
malloc 实际分配的内存 是比你想要的内存是要大的 其他的每一位的作用 可以在内存调用相关课程里面学习
附加的东西 格外开销基本都固定的 图中蓝色的部分才是用户真正需要的 其他部分是额外开销

stl 中allocator的使用

在这里插入图片描述
如图可以看到 vector list deque里面的分配器都是一样的 allocator<_Ty>

allocators 内部实现

vc的分配器 并没有太多的技巧可言

在这里插入图片描述
里面分配allocate 底层是调用operator new 而这个底层是调用malloc函数
里面释放deallocate 底层调用delete delete底层调用的是free

下面是BC5的stl 设计

在这里插入图片描述

在这里插入图片描述

GCC的allocators

注意下面是老版本的allocator 不是现在在使用的

在这里插入图片描述

2.9版本GCC使用的allocator是什么?

在这里插入图片描述
gcc allocator现状的运行模式 某个阶段 只有图 源代码可以在内存管理的课程里面学习(待学1)
在这里插入图片描述

设计就是尽量减少malloc次数的开销 减少malloc所带来的额外开销
如图所示 图中有16个链表 从1到16排序 每个链表负责管理的都是n*8字节的大小
所有的容器 需要内存的时候 都来问这个分配器要内存 容器的倍数大小会被调整成8的倍数
比如我需要50个字节 那么就会被分配到56个字节 会到对应的链表里面去查询是否有可用空间 没有的话就会去申请 申请一大块内存并做切割 切割成这个链表管理的大小 8 的倍数 并用单向链表去连接
这样申请出来的内存cookie较少 比每次逐次分配的开销更小
gcc的优化地方就在于这个地方

这里面cookie的作用

我们malloc出来的空间一般直接通过 free去释放 不需要记录传入的指针所指向的地址占用空间 因为这部分已经在malloc的时候 被记录在额外开销里面去了 gcc这样设计allocator是不需要这种cookie的 每个空间都有自己的管理链表来控制

4.9版本的GCC allocator

在这里插入图片描述

4.9版本的allocator情况没有 2.9的版本好 这一点有疑惑

但是4.9版本仍然保留着2.9的allocator设计 并改名如下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/598168.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis系列之key过期策略介绍

为什么要有过期策略&#xff1f; Redis是一个内存型的数据库&#xff0c;数据是放在内存里的&#xff0c;但是内存也是有大小的&#xff0c;所以&#xff0c;需要配置redis占用的最大内存&#xff0c;主要通过maxmemory配置 maxmomory <bytes> # redis占用的最大内存官…

深入解析C#中的async和await关键字

文章目录 一、异步编程的基本概念及其在C#中的实现二、async关键字的定义及其用法三、await关键字的定义及其用法示例代码&#xff1a;使用async和await编写一个简单的异步程序 四、async和await的优点注意事项 五、C#下async和await中常见问题汇总1. 异步方法中的await调用2. …

CST电磁仿真软件远场源的导出调用和提取结果【小白必看】

远场源的导出&调用(1) 提取Hybrid仿真所需的远场源&#xff01; Post-Processing > Tools > Result Templates Tools >Farfield and Antenna Properties > Export Farfields As Source 混合求解(Hybrid Simulation)是对安装在舰船等大型平台上的天线进行仿真…

【Leetcode 42】 接雨水-单调栈解法

基础思路&#xff1a; 维持栈单调递减&#xff0c;一旦出现元素大于栈顶元素&#xff0c;就可以计算雨水量&#xff0c;同时填坑&#xff08;弹出栈顶元素&#xff09; 需要注意&#xff1a; 单调栈通常保存的是下标&#xff0c;用于计算距离 public static int trap2(int[…

什么是OSW(光交换)?

光交换&#xff08;OSW&#xff09;是光传输网络中的一项关键技术&#xff0c;为复杂网络内光信号的动态路由和管理提供了手段。OSW的工作原理涉及对光信号路径的精确控制&#xff0c;确保光通信系统中的高效和灵活传输。本文全面介绍了OSW的不同类型、功能、工作模式和优势&am…

Linux 二十一章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

上市企业扣非净利润是什么意思,可以反映什么问题?

扣非净利润&#xff0c;全称“扣除非经常性损益后的净利润”&#xff0c;是指企业在剔除与正常经营无关的、偶然发生的损益后所得到的利润。这些非经常性损益包括但不限于政府补贴、处置长期资产、税收返还等。 扣非净利润的计算公式为&#xff1a;扣非净利润 净利润 - 非经常…

python:机器学习特征优选

作者&#xff1a;CSDN _养乐多_ 在Python中进行机器学习特征选择的方法有很多种。以下是一些常用的方法&#xff1a; 过滤法&#xff08;Filter Methods&#xff09;&#xff1a;通过统计方法或者相关性分析来评估每个特征的重要性&#xff0c;然后选择最相关的特征。常用的…

基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 遗传算法&#xff08;GA&#xff09;原理 4.2 BP神经网络原理 4.3 遗传优化BP神经网络结合应用 4.4 遗传算法简要改进 5.完整程序 1.程序功能描述 基于改进遗传优化的BP神经网络金融…

电机控制系列模块解析(17)—— 速度环

一、电机转速控制 电机控制的速度环是整个电机控制系统中的外环&#xff0c;其主要任务是根据设定的转速指令值&#xff08;目标速度&#xff09;与实际电机转速之间的偏差&#xff0c;调整电流环的参考值&#xff08;d轴电流Id或q轴电流Iq&#xff0c;涉及类似单电流环的弱磁…

OpenCampass评测实战 作业

按照如下教程文档操作即可&#xff1a;https://aicarrier.feishu.cn/wiki/NxUOwnLuvi0clykyzj7ccSHPndb

JavaScript解决精度问题-math.js-使用入门

JavaScript精度失真案例 0.1+0.2 结果是:0.300000000000000041-0.9 结果是:0.099999999999999984.10*100 结果是:409.999999999999946.10/0.1 结果是:60.99999999999999大数计算 9007199254740992+1 结果是9007199254740992 JavaScript 浮点数运算结果不对,因浮点数的存储…

物料厘不清?企业如何做好“物料管理”

物料包括原材料、半成品、成品、辅助用品以及生产过程中必然产生的边角余料、废料等。在制造企业中&#xff0c;各个部门的业务流程几乎都要用到物料&#xff1a; 销售和订单录入部门要通过物料确定客户定制产品的构形&#xff1b; 计划部门要根据物料来计划物料和能力的需求…

AI绘画ComfyUI工作流安装教程,新手入门安装部署教程

ComfyUI 是专为 Stable Diffusion 打造的图形用户界面&#xff08;GUI&#xff09;&#xff0c;采用了基于节点的操作方式。用户可以通过连接不同的模块&#xff08;即节点&#xff09;来创建复杂的图像生成流程。这些节点涵盖了多样的功能&#xff0c;包括加载检查点模型、输入…

卧龙搞怪作妖,图形化编程桌面内测探秘故事

在一间古朴的办公室内&#xff0c;卧龙与凤雏相对而坐&#xff0c;悠闲地品着茶。茶香袅袅&#xff0c;弥漫在空气中。 “凤雏贤弟啊&#xff0c;你可曾忆起往昔在那图形化编程桌面&#xff0c;咱们行产品内测之时&#xff0c;那乱象丛生之景呢&#xff1f;”卧龙微微眯眼&…

深度解析互联网医疗源码:视频问诊APP开发技术剖析

视频问诊APP作为在线医疗其中的重要一环&#xff0c;正在改变人们就医的方式。今天&#xff0c;我将为大家详解互联网医疗源码&#xff0c;探讨视频问诊APP开发技术&#xff0c;揭示其背后的原理和关键技术。 一、视频问诊APP的基本功能 视频问诊APP作为一种新型的医疗服务平台…

JAVA语言开发的(智慧校园系统源码)智慧校园的痛点、智慧校园的安全应用、智慧校园解决方案

一、智慧校园的痛点 1、信息孤岛问题&#xff1a;由于校园内各部门或系统独立开发&#xff0c;缺乏统一规划和标准&#xff0c;导致数据无法有效整合和共享&#xff0c;形成了信息孤岛。 2、技术更新与运维挑战&#xff1a;智慧校园的建设依赖于前沿的信息技术&#xff0c;如云…

Python进阶之-jinja2详解

✨前言&#xff1a; &#x1f31f;什么是jinja2&#xff1f; Jinja2 是一个强大的 Python 模版引擎&#xff0c;主要用于生成HTML或其他文本文件。这个库非常适合开发动态网站和Web应用的视图层&#xff0c;因为它支持逻辑操作如循环和条件判断&#xff0c;还可以继承和重用模…

vue快速入门(五十七) 作用域插槽

注释很详细&#xff0c;直接上代码 上一篇 新增内容 作用域插槽实现表格删除数据 源码 App.vue <template><div id"app"><!-- 向子组件传值 --><MyTable :tableData"tableData"><!-- 接收子组件的传值&#xff0c;默认是对象格…

商超物联网~配置学生健康与安全

配置学生健康与安全示实验 作者&#xff1a;知孤云出岫 作者主页&#xff1a;点击这里 组网图形 图1 配置学生健康与安全示例组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 某学校由于重视学生的健康与安全&#xff0c;希望能够通过技术手段…