部分内容个人感觉不是特别重要,所以没有记录了.其实还是懒 embedded pointers 把对象的前四字节当指针用. struct obj{ struct obj *free_list_link; }; 一般工业级的设计里小区块都是大于4字节的,小于四字节的区块不考虑,直接补上. 分配器 分配器 开头的样子. alloc 即_default_alloc_template,二层分配器 ROUND_UP:调到align的边界. FREELIST_INDEX:根据size和align取free_l…
per-class allocator 2 tips: operator new重载 不会被派生类实际使用,因为父类大小内存的分配交给子类去调用明显是不正确的.实际上会被转交至 : : operator new. operator delete: 使用例: 对pre-class allocator 2的个人理解:通过Union联合体实现内存空间 "待使用"(入池?)和"正在使用" (出池?) 两种状态的区分: AirplaneRep 变量 是 "正在使用&…
C++ memory primitives(原语) new 若malloc失败会调用 int _callnewh(size_t t); 即调用用户设定的handler(回调函数指针),可用于内存回收防止泄露. operator new 和 new operator的区别 new operator 是 分配内存+调用构造函数初始化 operator new 是 new operator操作的一部分,它只负责分配内存,它对构造函数一无所知! 一般长这样 void * operator new(siz…
常常看到前辈们大牛们感慨, 感慨我们这一代人生活在最好的时代, 拥有海量的学习资源以及指数增长的新技术与新知识. 的确, 如果你是这个时代的大学生,或是初出茅庐的程序员, 你会发现有太多太多的选择, 甚至是穷尽一生都看不完的资料,书籍, 文档..... 但是, 作为一个亲历者,这样的环境真的是最适合程序员成长吗? 选择虽然多了,却导致许多人迷失了方向,忽视了基础知识技术的关键性.正如刘未鹏在<暗时间>里面所提到的, 对于程序员来说,如何区分本质和非本质的知识 是极为关键的. 学习了许多看似”高…
explicit 主要用于处理一个参数的构造函数,使其不用于隐式类型转换(防止二义性) operator->() C++设计 ->可以一直保留下去 仿函数 仿函数会隐式继承他们中的一个(详见 标准库课程) namespace经验谈 放一些全局的测试代码..不用花时间去想新名字 template的实现:二次编译 模板偏特化 -- 个数的偏 从左至右绑定类型名,不可跳过. 模板偏特化 -- 范围的偏 (例:特化指针类型) 模板模板参数 -- 具体内容见C++11 这个不算模板模板参数,因为模板类型…
1. 写作缘起 几年前,我在一家农业物联网公司,负责解决其物联网产品线.我们当时基于.net平台打造了一套实时数据采集系统,可以把数以百万级的传感器传送回来的数据采集入库并根据这些数据进行建模.在搭建这套实时数据采集系统的时候,高并发高可用被首次提出,同时要求系统不会有太大的时延.一旦有时延,也就意味着损失.比如一个有3000头猪的猪舍,假设空气温度达到了比较高的水平,但是采集探头采集的数据上传到服务器管道中,由于被积压了5分钟后才被处理,那么主动预警系统打开风机的时候,也许已经晚了,这五分钟的…
今天看了primer C++的 “动态内存管理类”章节,里面的例子是模拟实现std::vector<std::string>的功能. 照抄之后发现编译不通过,有个库函数调用错误,就参考着自己写了一份简单的int版. 实现思路: 1.初始化时,容器容量为1. 2.往容器添加数据时,如果容器没有放满,就直接放进去. 3.往容器添加数据时,如果容器已经满了: 3.1 申请新的更大的存储空间(2倍) 3.2 把原来的数据复制到新的存储空间 3.3 删除旧的存储空间 3.4放入数据 代码如下: // 1…
在每个OC对象内部,都专门有8个字节的存储空间来存储引用计数器. 引用计数器的常见操作 retain消息:堆内存中对象的计数器变量 +(该方法返回对象本身,要想计数器变量加1就要调用对象的retain方法) release消息: 堆内存中对象的计数器变量 -(不代表释放对象,要想计数器变量减1就要调用对象的release方法) retainCount:获得对象当前的应用计数器值,输出:%ld %lu,NSLog(@"%lu",h.retainCount); 注意:release不代表销…
转自:http://www.cnblogs.com/nonato/archive/2013/11/28/3447162.html iOS的对象都继承于NSObject, 该对象有一个方法:retainCount ,内存引用计数. 引用计数在很多技术都用到: window下的COM组件,多线程的信号量,读写锁,思想都一样. (一般情况下: 后面会讨论例外情况)alloc 对象分配后引用计数为1retain 对象的引用计数+1copy copy 一个对象变成新的对象(新内存地址) 引用计数为1 原来…
自动释放池: @autoreleasepool { } 内存管理机制       谁污染,谁治理 垃圾回收机制:gc(Garbage collection),由系统管理内存,开发人员不需要管理. OC从版本2.0之后开始支持垃圾回收机制,但iOS开发平台不支持垃圾回收机制 继承自NSObject的对象需要内存管理 OC中通过引用计数器管理内存 通过引用计数器管理内存的两种方式 1.MRC:(maual reference count),手动引用计数,就是开发人员通过引用计数管理内存 2.ARC:…