[ C++ ] 勿在浮沙筑高台 —— 内存管理(9~16p)primitives(下)
per-class allocator 2
tips: operator new重载 不会被派生类实际使用,因为父类大小内存的分配交给子类去调用明显是不正确的。实际上会被转交至 : : operator new.
operator delete:
使用例:
对pre-class allocator 2的个人理解:通过Union联合体实现内存空间 “待使用”(入池?)和“正在使用” (出池?) 两种状态的区分:
AirplaneRep 变量 是 ”正在使用“ 状态下的对象内容,Airplane * 指针作用是在 “待使用” 状态下以链表的形式维护 “内存池”(菜鸡如我并不知道这里能否被这么称呼)。
(注意malloc下分配的内存并不一定连续,故这里出现了下标和指针并用的古怪状况,同时视频中的图例也有些许迷惑性,不是很好理解)成员operator new的作用如下所述:
当FreeList头部不为空,则有剩余,将FreeList头部指针右移一步长,并返回原头部位置作为new分配结果。若已为空,则内存不够,将在已分配的内存块后再分配BLOCK_SIZE * sizeof(Airplane)大小的内存,并从1号块开始用next串起来。表尾next为NULL,FreeList头部指针指向1号块地址,并返回0号块作为本次分配结果。
成员operator delete的作用如下所述:
将要释放的对象放回FreeList头部,并将FreeList头部指针指向该对象。(链表前插法!)
原谅太弱了。。原来还有这么骚的操作,惊了static allocator
静态形式,代码可复用。思路同上。不过这里没有使用union,而是通过struct将未分配块前四字节当作指针将块串起来。
调用:
原型:
现代的allocator —— global allocator
不在每个类内单独实例化一个allocator了,而是选择全局的实现,下面这个雏形可以应付16种不同的内存块大小。
[ C++ ] 勿在浮沙筑高台 —— 内存管理(9~16p)primitives(下)的更多相关文章
- [ C++ ] 勿在浮沙筑高台 —— 内存管理(18~31p) std::alloc
部分内容个人感觉不是特别重要,所以没有记录了.其实还是懒 embedded pointers 把对象的前四字节当指针用. struct obj{ struct obj *free_list_link; ...
- [ C++ ] 勿在浮沙筑高台 —— 内存管理(1~8p)primitives(上)
C++ memory primitives(原语) new 若malloc失败会调用 int _callnewh(size_t t); 即调用用户设定的handler(回调函数指针),可用于内存回收防 ...
- 勿在浮沙筑高台-- 关于IT技术学习的一点反思
常常看到前辈们大牛们感慨, 感慨我们这一代人生活在最好的时代, 拥有海量的学习资源以及指数增长的新技术与新知识. 的确, 如果你是这个时代的大学生,或是初出茅庐的程序员, 你会发现有太多太多的选择, ...
- [ C++ ] 勿在浮沙筑高台 —— 拾遗
explicit 主要用于处理一个参数的构造函数,使其不用于隐式类型转换(防止二义性) operator->() C++设计 ->可以一直保留下去 仿函数 仿函数会隐式继承他们中的一个(详 ...
- 微言netty:不在浮沙筑高台
1. 写作缘起 几年前,我在一家农业物联网公司,负责解决其物联网产品线.我们当时基于.net平台打造了一套实时数据采集系统,可以把数以百万级的传感器传送回来的数据采集入库并根据这些数据进行建模.在搭建 ...
- 【转】Java内存管理:深入Java内存区域
转自:http://www.cnblogs.com/gw811/archive/2012/10/18/2730117.html 本文引用自:深入理解Java虚拟机的第2章内容 Java与C++之间有一 ...
- Cocos2d-x内存管理研究<二>
http://hi.baidu.com/tzkt623/item/46a26805adf7e938a3332a04 上一篇我们讲了内核是如何将指针加入管理类进行管理.这次我将分析一下内核是如何自动 ...
- JVM自动内存管理学习笔记
对于使用 C.C++ 的程序员来说,在内存管理领域,他们既是拥有最高权力的皇帝又是从事最基础工作的劳动人民——拥有每一个对象的“所有权”,又担负着每一个对象生命开始到终结的维护责任.对于 Java 程 ...
- Java内存管理:深入Java内存区域
Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 对于从事C和C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的皇帝 ...
随机推荐
- 高吞吐量的分布式发布订阅消息系统Kafka之Producer源码分析
引言 Kafka是一款很棒的消息系统,今天我们就来深入了解一下它的实现细节,首先关注Producer这一方. 要使用kafka首先要实例化一个KafkaProducer,需要有brokerIP.序列化 ...
- 获取<input type="radio">被选中的内容
背景: <input type="radio">,该标签表示的是单选按钮,这个类型相对于其他类型的获取,比较特殊,特此记录一下. 获取方式: 1. 使用选择器直接获取( ...
- 【Flume】知识总结
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理,并 ...
- Java实现 稀疏矩阵乘积
稀疏矩阵乘积 描述 给定两个N × N的稀疏矩阵A和B,其中矩阵A有P个元素非0,矩阵B有Q个元素非0.请计算两个矩阵的乘积C = A × B并且输出C中所有非0的元素. 输入 第一行包含三个整数N, ...
- Java实现二分查找(折半查找)
1 问题描述 首先,了解一下何为折半查找?此处,借用<算法设计与分析基础>第三版上一段文字介绍: 2 解决方案 2.1 递归法 package com.liuzhen.chapter4; ...
- Java实现 蓝桥杯 算法训练 Multithreading
问题描述 现有如下一个算法: repeat ni times yi := y y := yi+1 end repeat 令n[1]为你需要算加法的第一个数字,n[2]为第二个,-n[N]为第N个数字( ...
- 2018年全国多校算法寒假训练营练习比赛(第二场)H-了断局
题目描述 既然是了断局了,大家就随便玩玩数字呗.已知一个数列前十项分别是{0, 1, 1, 2, 4, 7, 13, 24, 44, 81},小G不满足呀:我要更多的数!!!不给就不让你们玩了.小G会 ...
- 总结梳理:webpack中如何使用vue
1. 安装vue的包 cnpm i vue -S 2. 由于在webpack中,推荐使用 .vue这个组件模板文件定义的组件,所以,需要安装, 能解析这个文件的loader: cnpm i vu ...
- spring Cloud服务注册中心Eureka集群
spring Cloud服务注册中心Eureka集群配置: 在application.yml文件加以下配置: server: port: 8761 tomcat: uri-encoding: UTF- ...
- 彻底搞懂 etcd 系列文章(二):etcd 的多种安装姿势
0 专辑概述 etcd 是云原生架构中重要的基础组件,由 CNCF 孵化托管.etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册与发现,还可以作为 key-value 存储的中间件 ...