部分内容个人感觉不是特别重要,所以没有记录了。其实还是懒

  • embedded pointers

    把对象的前四字节当指针用.

        struct obj{
    struct obj *free_list_link;
    };

    一般工业级的设计里小区块都是大于4字节的,小于四字节的区块不考虑,直接补上。

  • 分配器

    分配器 开头的样子。

  • alloc 即_default_alloc_template,二层分配器



    ROUND_UP:调到align的边界。

    FREELIST_INDEX:根据size和align取free_list数组下标。

    free_list:指向指针数组元素的指针。

    refill:填充free_list并返回第一个区块的起始地址。(从战备池拿或者malloc分配)

    chunk_alloc: 请求分配一大块内存。

    为什么deallocate不释放?因为内存块是否连续难以判断。

    但是同时也会带来内存资源被某个程序一直抓住,没法被其他程序利用。

    deallocate参数的指针必须为8的倍数

    大于MAX_BYTES的allocate和deallocate丢给第一层,即malloc和free。

  • refill:充值

    chunk收到 nobjs 块n bytes大小的内存块,其中nobjs可通过引用被修改(如内存不够的情况)。

    result返回第一块地址。

    大致工作流程:

    • 若nobjs==1,则直接返回chunk。
    • 让my_free_list指针指向对应n大小块的数组下标位置。
    • *my_free_list指向 链表第二块位置。(第一块地址做返回值,因为要返回一个对象大小的内存块)
    • 然后就是链表的常规操作。

      (为啥最后一块的判定是nobjs-1?因为第一块跳过了)
  • chunk_alloc:分配一大块内存



    具体流程如下图:

    G2.9 std::alloc先天缺陷:

    1.没法还内存,因为已分配部分的头部没有记录。(设计缺陷)

    2.代码风格不好。

推荐一个更全面的总结:https://cloud.tencent.com/developer/article/1510224

[ C++ ] 勿在浮沙筑高台 —— 内存管理(18~31p) std::alloc的更多相关文章

  1. [ C++ ] 勿在浮沙筑高台 —— 内存管理(9~16p)primitives(下)

    per-class allocator 2 tips: operator new重载 不会被派生类实际使用,因为父类大小内存的分配交给子类去调用明显是不正确的.实际上会被转交至 : : operato ...

  2. [ C++ ] 勿在浮沙筑高台 —— 内存管理(1~8p)primitives(上)

    C++ memory primitives(原语) new 若malloc失败会调用 int _callnewh(size_t t); 即调用用户设定的handler(回调函数指针),可用于内存回收防 ...

  3. 勿在浮沙筑高台-- 关于IT技术学习的一点反思

    常常看到前辈们大牛们感慨, 感慨我们这一代人生活在最好的时代, 拥有海量的学习资源以及指数增长的新技术与新知识. 的确, 如果你是这个时代的大学生,或是初出茅庐的程序员, 你会发现有太多太多的选择,  ...

  4. [ C++ ] 勿在浮沙筑高台 —— 拾遗

    explicit 主要用于处理一个参数的构造函数,使其不用于隐式类型转换(防止二义性) operator->() C++设计 ->可以一直保留下去 仿函数 仿函数会隐式继承他们中的一个(详 ...

  5. 微言netty:不在浮沙筑高台

    1. 写作缘起 几年前,我在一家农业物联网公司,负责解决其物联网产品线.我们当时基于.net平台打造了一套实时数据采集系统,可以把数以百万级的传感器传送回来的数据采集入库并根据这些数据进行建模.在搭建 ...

  6. (原创)动态内存管理练习 C++ std::vector<int> 模拟实现

    今天看了primer C++的 “动态内存管理类”章节,里面的例子是模拟实现std::vector<std::string>的功能. 照抄之后发现编译不通过,有个库函数调用错误,就参考着自 ...

  7. oc-31-多对象的内存管理

    在每个OC对象内部,都专门有8个字节的存储空间来存储引用计数器. 引用计数器的常见操作 retain消息:堆内存中对象的计数器变量 +(该方法返回对象本身,要想计数器变量加1就要调用对象的retain ...

  8. iOS内存管理retain,assign,copy,strong,weak

    转自:http://www.cnblogs.com/nonato/archive/2013/11/28/3447162.html iOS的对象都继承于NSObject, 该对象有一个方法:retain ...

  9. OC基础:内存(内存管理) 分类: ios学习 OC 2015-06-25 16:50 73人阅读 评论(0) 收藏

    自动释放池: @autoreleasepool { } 内存管理机制       谁污染,谁治理 垃圾回收机制:gc(Garbage collection),由系统管理内存,开发人员不需要管理. OC ...

随机推荐

  1. 软件攻城狮究级装B指南

    引言 装B于无形,随性而动,顺道而行,待霸业功成之时,你会发现:装B是牛B最好的的试金石. -- SuperDo 第一章.人间兵器(准备工具) <论语·魏灵公>:“工欲善其事,必先利其器. ...

  2. [注]6W运营法则教你盘活社区内容运营

    社区运营人员大体分为两种:一种是内容运营,这类人才基于产品,一般对文字以及对广告文案比较敏感:另外一种则是更多基于产品推广运营,前者需要把内容最大化地曝光,后者则是把产品推送给用户,两者的是相辅相成, ...

  3. keras常见问题

    问题:AttributeError: 'CRF' object has no attribute '_outbound_nodes' 解答:这个一般情况下是keras版本的问题,将其改为keras== ...

  4. 关于ubuntu下使用l2tpvpn和远程桌面windows系统的测试

    一.背景: 2019年9月下旬到10月上旬,到海南澄迈福山度假.随身带的笔记本电脑中windows10系统因硬盘故障挂了,在另一块硬盘上的ubuntu18.04系统正常.因媳妇需要在10月1日远程回公 ...

  5. OAuth + Security - 3 - JWT令牌

    为什么使用JWT令牌 在上面的资源服务器中,通过配置,我们了解到,当我们拿着token去获取资源时,程序会先去调用远程认证服务器的端点去验证解析token,或者在本地解析校验token,这样毫无疑问, ...

  6. ERROR: ...hbase.PleaseHoldException: Master is initializing

    同学升级HBase后遇到这个问题,hbase shell,status就可以看到 ERROR: -hbase.PleaseHoldException: Master is initializing 解 ...

  7. Html超链接和表单

    超链接 a href="链接地址" target="链接打开方式" title="当鼠标放在连接上显示的文字"></a>链 ...

  8. IDEA字节码学习查看神器jclasslib bytecode viewer介绍

    转载来自:https://blog.csdn.net/w605283073/article/details/103209221 一.背景 很多人想学习Java反汇编后的字节码,但是一方面缺乏好的资料, ...

  9. Java实现 蓝桥杯VIP 算法训练 连通分块(并查集)

    试题 算法训练 连通分块 资源限制 时间限制:200ms 内存限制:8.0MB 问题描述 连通分块 输入格式 输入的第一行包含两个整数n, m n代表图中的点的个数,m代表边的个数 接下来m行,每行2 ...

  10. Java实现 LeetCode 593 有效的正方形(判断正方形)

    593. 有效的正方形 给定二维空间中四点的坐标,返回四点是否可以构造一个正方形. 一个点的坐标(x,y)由一个有两个整数的整数数组表示. 示例: 输入: p1 = [0,0], p2 = [1,1] ...