首页 > 其他分享 >std::allocator

std::allocator

时间:2023-08-22 11:35:13浏览次数:30  
标签:std malloc 字节 16 战备 free 链表 allocator

  • 设计主要目的:减少malloc的cookie的开销
  • 设计主要方法:减少malloc的次数,用数据结构管理已经分配的内存。
  • 核心数据结构:free_list[16]存储16根链表头,free_list[i],0~15 ,free_list[i]管理(i + 1)*16字节型区块。
  • 客户所需要内存块大小会被调整为16的倍数。
  • 流程:分配内存的时候先从战备池里拿,(能切多少就尽量切多少,可以切1~20之间个区块)如果战备池剩余量不足,若有碎片先处理碎片,将碎片挂到16根中的对应那根,然后调用malloc,调用malloc时分配 客户需要的字节数*20*2+RoundUp(RoundUp会增长,内存越要越多),其中分配的一半内存组织成16根链表中的对应那根链表,另一半做战备池。
  • 如果malloc失败,战备池余量也不足一个,那么分配器将会向右寻找最接近分配字节的链表空余中拿一块回填战备池,直至失败。
  • 战备池的实现用两根指针指向start_free end_free。
  • embedded pointers 嵌入式指针,链表借每一个区块的前四个字节作为指针,该区块分配出去之后可以任意修改覆盖前四个字节,该区块回收时,再将该区块的前四个字节作为指针链入链表。

标签:std,malloc,字节,16,战备,free,链表,allocator
From: https://www.cnblogs.com/wuyun--wy/p/17647649.html

相关文章

  • STD4NK60ZT4一款N沟道600 V,1.7 Ω 内阻,4A超级MESH功率MOS管
    器件描述:漏源电压(Vdss):600V连续漏极电流(Id)(25°C时):4A(Tc)栅源极阈值电压:4.5V@50uA漏源导通电阻:2Ω@2A,10V最大功率耗散(Ta=25°C):70W(Tc)类型:N沟道N沟道600V4A,请139对2659接6180。应用场景:适用于高效率开关电源、电机驱动器和照明应用等,可用于电源因数校正(PFC)电路中的桥式......
  • C++里std::enable_shared_from_this是干什么用的?
    std::enable_shared_from_this使用场景在很多场合,经常会遇到一种情况,如何安全的获取对象的this指针,一般来说我们不建议直接返回this指针,可以想象下有这么一种情况,返回的this指针保存在外部一个局部/全局变量,当对象已经被析构了,但是外部变量并不知道指针指向的对象已经被析构了,如......
  • C++ 多线程详解之异步编程 std::packaged_task
    std::packaged_task将任何可调用对象(比如函数、lambda表达式等等)封装成一个task,可以异步执行。执行结果可以使用std::future获取。比如下面的例子,构造一个std::packaged_task后,get_future()函数返回一个std::future对象,可以获取task异步或者同步执行的结果。#includ......
  • #yyds干货盘点#FastDFS配置Nginx访问
    下载相关依赖软件包yum-yinstallwgetmakezlibzlib-develgcc-c++libtoolopensslopenssl-develwgethttp://nginx.org/download/nginx-1.10.2.tar.gztar-xzvfnginx-1.10.2.tar.gz安装Nginxcdnginx-1.10.2./configure--prefix=/data/apps/nginx-download\--p......
  • 关于callback和std::bind的那些事
    前言使用callback常常需要绑定类的具体函数,哪些可以绑定哪些不能?分析callback不同与普通函数,其入参也是一个函数,具体行为由入参决定我们看这样一段代码https://godbolt.org/z/4YTKs567j#include<functional>#include<iostream>classA{public:voidprint(constint&......
  • c++ std::to_string实现原理
    写这篇的起因是看到MSVCSTL的一个issue,里面提到to_string<int>的实现,正常人的思维是直接除10拿到每位,其实有个更高效的查表法字符串转数字除100拿到两位,并查表填入,少了一半的除法,代价是需要一个201个byte的空间,下面是gcc的实现//Writeanunsignedintegervaluetother......
  • C++ 字符串拼接技巧(stringstream、字符串迭代器、字符串的加法运算符、std::accumulat
    在C++中,经常需要将多个字符串拼接成一个大字符串。这个过程很容易出错,但有一些技巧可以帮助我们轻松地实现这个目标。本文将介绍一些C++中join字符串的技巧。一、使用stringstreamstringstream是一个流。使用它可以将多个字符串连接起来,然后将它们转换为一个字符串。可......
  • std::optional的使用
    optional是一个模板类:template<classT>classoptional;它内部有两种状态,要么有值(T类型),要么没有值(std::nullopt)。有点像T*指针,要么指向一个T类型,要么是空指针(nullptr)。std::optional有以下几种构造方式:#include<iostream>#include<optional>usingnamespacestd;intmai......
  • allocator 不是模板 解决方案
    场景严重性 代码 说明 项目 文件 行 禁止显示状态错误(活动) E0864 allocator不是模板 cvos_srtmp_service C:\ProgramFiles(x86)\MicrosoftVisualStudio\2019\Professional\VC\Tools\MSVC\14.16.27023\include\regex 1175 错误(活动) E0864 associated_allocator不是模板 ......
  • ISTDP:心灵的深海潜水
    (仅供参考)有一天,我被一种名为ISTDP(IntensiveShort-TermDynamicPsychotherapy,强化短期动态心理治疗)的心理治疗方法所吸引。我决定深入研究这个看似神秘的名字背后的内容。就像一个深海潜水员,我将踏上一个探索我们情感深处、挖掘我们心灵深层防御机制的旅程。1.ISTDP:强化短期动......