7: 分配器

news2024/12/27 0:56:15

文章目录

  • 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设计 并改名如下
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows环境下VSCode C无法跳转自动补全

前言&#xff1a; 本文记录了自己在配置 Windows环境下 VSCode C开发环境的遇到的问题和解决方法。 参考: vscode c语言没有代码提示_clangd提示不生效-CSDN博客 VSCODE无法跳转_vscode 不能跳转-CSDN博客 vscode c/c环境配置&#xff08;MinGW&#xff09;调用第三官方库…

MySQL:多表查询练习

#1.出版社信息 与 图书信息 交叉连接 select * from 出版社信息 cross join 图书信息; #2.从“客户信息”和“订单信息”两张数据表中查询购买了商品的客户信息&#xff0c;要求查询结果显示客户姓名、订单编号、订单状态。 select 客户信息.客户姓名,订单信息.订单编号,订单…

C++ | Leetcode C++题解之第72题编辑距离

题目&#xff1a; 题解&#xff1a; class Solution { public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size() 1, vector<int>(word2.size() 1, 0));for (int i 0; i < word1.size(); i) dp[i][0] i;for (int j…

HR面试测评,如何评估求职者的责任心?

HR招聘的过程中&#xff0c;如何去分析求职者的责任心&#xff1f;候选人是否具备责任心&#xff0c;这决定着他的工作绩效的高低&#xff0c;是企业利益的屏障&#xff0c;也是个体职业发展的基础。 &#xff08;引用定义&#xff09;责任心是指个体&#xff0c;能自觉地认识到…

HarmonyOS NEXT星河版之在线考试功能实战

文章目录 一、目标二、基础搭建2.1 定义数据2.2 mock数据2.3 主页面布局2.3.1 布局规划2.3.2 标题栏2.3.3 进度条2.3.4 答题模块2.3.5 底部按钮 2.4 主页面逻辑2.4.1 加载数据及定义变量2.4.2 上一题、下一题 三、选项点击及高亮3.1 声明对象及变量3.2 给选项注册点击事件3.3 处…

Laravel框架使用图片处理简单教程

PHP图片处理扩展包使用 文中使用的是Laravel框架&#xff0c;更多框架扩展包请点击传送门-》更多框架集成 Intervention Image 是一个开源的 PHP 图像处理和操作 库。它提供了一个更简单也更优雅的方式来创建/编辑/组合图像,并且支持最常见的两个图像处理库 GD Library 和 Im…

经验之谈——正确选择矿用旋转式孔板流量计

说到孔板流量计大家除了想到矿用旋转式孔板流量计是不是还会想到价格&#xff1f;我们举个例子&#xff1a; 10块钱的停车费你觉得贵 于是抱着侥幸心理停路边 突然一张200的罚单贴车上 你才悔不当初 早知道给100停车费也愿意 当你真正需要质量和保障的时候 多高的价格你都不嫌…

软件FMEA的时机:架构设计、详设阶段——FMEA软件

免费试用FMEA软件-免费版-SunFMEA 软件FMEA&#xff08;故障模式与影响分析&#xff09;是一种预防性的质量工具&#xff0c;旨在识别软件中可能存在的故障模式&#xff0c;并分析其对系统性能、安全性和可靠性的影响。在软件开发生命周期中&#xff0c;选择适当的时机进行FME…

【C语言】动态分配内存

内存的五大分区 1、堆区&#xff08;heap&#xff09;——由程序员分配和释放&#xff0c; 若程序员不释放&#xff0c;程序结束时一般由操作系统回收。注意它与数据结构中的堆是两回事 2、栈区&#xff08;stack&#xff09;——由编译器自动分配释放 &#xff0c;存放函数的…

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

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

【docker】常用的Docker编排和调度平台

常用的Docker编排和调度平台 Kubernetes (K8s): Kubernetes是目前市场上最流行和功能最全面的容器编排和调度平台。它由Google开发并开源&#xff0c;现由CNCF&#xff08;云原生计算基金会&#xff09;维护。Kubernetes设计用于自动化容器部署、扩展和管理&#xff0c;支持跨…

EPSON的温补晶振TG7050SKN

EPSON公司推出的温补品振(TCXO)TG7050SKN&#xff0c;尺寸大小为7.0x5.0x1.5 mm&#xff0c;具有高稳定性(105℃℃高温)等特点&#xff0c;可输出10MHz~54MHz的频率可应用在网络同步&#xff0c;BTS&#xff0c;微波&#xff0c;以及需要符合Stratum3、SyncE和IEEE1588等规范的…

张大哥笔记:商标也可以赚大钱

一大早看群聊&#xff0c;发现群里几个小伙伴在讨论商标转让的事情&#xff0c;我一时兴起&#xff0c;就想知道怎么通过商标来赚钱呢&#xff1f;不查不知道&#xff0c;原来还可以这样用商标赚大钱&#xff01; 下面我给大家掰扯一下&#xff0c;首先我们来了解一下什么是商标…

LeetCode面试298,二叉树最长连续序列(Python)

开始想着dfs&#xff0c;两种情况 1.以root为根 2.不以root为根 但是这样需要两个dfs分别进行&#xff0c;那么时间复杂度就上去了。 class Solution:def longestConsecutive(self, root: Optional[TreeNode]) -> int:def dfs(root):# 以root为根节点&#xff0c;可以延…

递归与递推---题目练习

目录 1、递归实现指数型枚举 2、递归实现排列型枚举 3、递归实现组合型枚举 4、带分数 方法一 方法二 5、翻硬币 6、飞行员兄弟 7、费解的开关 递归是指在函数的定义中使用函数自身的方法。它通过不断地将问题分解为更小的子问题&#xff0c;直到达到基本情况&#xf…

【Gaea+UE5】创建基本的大型世界场景

目录 效果 步骤 一、在Gaea中生成地形 二、确定导出的地形规模 三、在UE中创建地形 四、验证UE创建的地形规模是否正确 五、使用M4自动地形材质 效果 步骤 一、在Gaea中生成地形 1. 打开Gaea官网下载软件 2. 打开Gaea软件&#xff0c;我们可以选择一个预设的山体 创…

机器学习——4.案例: 简单线性回归求解

案例目的 寻找一个良好的函数表达式,该函数表达式能够很好的描述上面数据点的分布&#xff0c;即对上面数据点进行拟合。 求解逻辑步骤 使用Sklearn生成数据集定义线性模型定义损失函数定义优化器定义模型训练方法&#xff08;正向传播、计算损失、反向传播、梯度清空&#…

Implicit Diffusion Models for Continuous Super-Resolution

CVPR2023https://github.com/Ree1s/IDM问题引入&#xff1a; – LIIF方法可以实现任意分辨率的输出&#xff0c;但是因为是regression-based方法&#xff0c;所以得到的结果缺少细节&#xff0c;而生成的方法(gan-based,flow-based&#xff0c;diffusion-based等)可以生成细节&…

JavaScript中的RegExp和Cookie

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 &#x1f506;RegExp &#x1f3b2; 1 什么是正则表达式 &#x1f3b2;2 创建…

从招标到合作:如何筛选与企业需求匹配的6sigma咨询公司

在市场竞争激烈的环境中&#xff0c;领军企业需要不断改进和创新才能在行业中保持竞争优势。为了解决产品质量、生产流程和客户满意度等方面的挑战&#xff0c;许多企业选择与6sigma咨询公司合作&#xff0c;推动企业的全面变革和持续发展。下面是企业在选择合作伙伴时通常会经…