[ C++ ] 勿在浮沙筑高台 —— 内存管理(18~31p) std::alloc
部分内容个人感觉不是特别重要,所以没有记录了。其实还是懒
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的更多相关文章
- [ C++ ] 勿在浮沙筑高台 —— 内存管理(9~16p)primitives(下)
per-class allocator 2 tips: operator new重载 不会被派生类实际使用,因为父类大小内存的分配交给子类去调用明显是不正确的.实际上会被转交至 : : operato ...
- [ C++ ] 勿在浮沙筑高台 —— 内存管理(1~8p)primitives(上)
C++ memory primitives(原语) new 若malloc失败会调用 int _callnewh(size_t t); 即调用用户设定的handler(回调函数指针),可用于内存回收防 ...
- 勿在浮沙筑高台-- 关于IT技术学习的一点反思
常常看到前辈们大牛们感慨, 感慨我们这一代人生活在最好的时代, 拥有海量的学习资源以及指数增长的新技术与新知识. 的确, 如果你是这个时代的大学生,或是初出茅庐的程序员, 你会发现有太多太多的选择, ...
- [ C++ ] 勿在浮沙筑高台 —— 拾遗
explicit 主要用于处理一个参数的构造函数,使其不用于隐式类型转换(防止二义性) operator->() C++设计 ->可以一直保留下去 仿函数 仿函数会隐式继承他们中的一个(详 ...
- 微言netty:不在浮沙筑高台
1. 写作缘起 几年前,我在一家农业物联网公司,负责解决其物联网产品线.我们当时基于.net平台打造了一套实时数据采集系统,可以把数以百万级的传感器传送回来的数据采集入库并根据这些数据进行建模.在搭建 ...
- (原创)动态内存管理练习 C++ std::vector<int> 模拟实现
今天看了primer C++的 “动态内存管理类”章节,里面的例子是模拟实现std::vector<std::string>的功能. 照抄之后发现编译不通过,有个库函数调用错误,就参考着自 ...
- oc-31-多对象的内存管理
在每个OC对象内部,都专门有8个字节的存储空间来存储引用计数器. 引用计数器的常见操作 retain消息:堆内存中对象的计数器变量 +(该方法返回对象本身,要想计数器变量加1就要调用对象的retain ...
- iOS内存管理retain,assign,copy,strong,weak
转自:http://www.cnblogs.com/nonato/archive/2013/11/28/3447162.html iOS的对象都继承于NSObject, 该对象有一个方法:retain ...
- OC基础:内存(内存管理) 分类: ios学习 OC 2015-06-25 16:50 73人阅读 评论(0) 收藏
自动释放池: @autoreleasepool { } 内存管理机制 谁污染,谁治理 垃圾回收机制:gc(Garbage collection),由系统管理内存,开发人员不需要管理. OC ...
随机推荐
- Hadoop 伪分布模式安装
( 温馨提示:图片中有id有姓名,不要盗用哦,可参考流程,有问题评论区留言哦 ) 一.任务目标 1.了解Hadoop的3种运行模式 2.熟练掌握Hadoop伪分布模式安装流程 3.培养独立完成Hado ...
- MySQL8.0 忘记密码、重置密码
修改my.cnf [mysqld] 域中添加skip-grant-tables 重启mysqld服务 systemctl restart mysqld 重新使用空密码登录,直接敲回车 mysql -u ...
- PHP获取今日、本周、本月、今年的开始日期和结束日期
/** * 今天开始的Y-m-d H:i:s * * @return string */ public static function beginToday() { return date('Y-m- ...
- css 3 背景图片为渐变色(渐变色背景图片) 学习笔记
6年不研究CSS发现很多现功能都没有用过,例如渐变色,弹性盒子等,年前做过一个简单的管理系统,由于本人美工不好,设计不出好看的背景图片,偶然百度到背景图片可以使用渐变色(感觉发现了新大陆).以后的项目 ...
- 【译】Gartner CWPP市场指南
https://www.gartner.com/doc/reprints?id=1-1YSHGBQ8&ct=200416&st=sb?utm_source=marketo&ut ...
- 使用 Typora 编辑器运用 Markdown 的语法编写文档
Markdown 介绍 Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档. Markdown 语言在 2004 由约翰·格鲁伯(英语:John Gruber)创建. ...
- (linux)Centos 7 xfsdump文件系统的备份和恢复
XFS提供了 xfsdump 和 xfsrestore 工具协助备份XFS文件系统中的数据.xfsdump 按inode顺序备份一个XFS文件系统. centos7选择xfs格式作为默认文件 ...
- webstorm 单词快捷翻译设置
1.打开webstorm中的设置,选择plugins,搜索 translations 安装,安装完成重启webstorm 2.设置快捷键翻译,打开webstorm设置,选择keymap,搜索trans ...
- Beta冲刺——代码规范与计划
这个作业属于哪个课程 软件工程 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.代码规范 采用ShowDoc网站进行编 ...
- HashMap1.7和1.8,红黑树原理!
jdk 1.7 概述 HashMap基于Map接口实现,元素以键值对的方式存储,并允许使用null键和null值,但只能有一个键作为null,因为key不允许重复,另外HashMap不能保证放入元素的 ...