Google之Chromium浏览器源码学习——base公共通用库(二)
上次提到Chromium浏览器中base公共通用库中的内存分配器allocator,其中用到了三方库tcmalloc、jemalloc;对于这两个内存分配器,个人建议,对于内存,最好是自己维护内存池;此外在windows下使用可使用其自带的内存分配方式;具体的第三方库可以参阅:http://www.360doc.com/content/13/0915/09/8363527_314549128.shtml;目前我们主要的精力尽可能在Chromium浏览器中base公共通用库的主要内容上,所以不再详细对那两个第三方内存分配库进行分析、研究,可留待以后研究;以下针对base下的allocator中的allocator.vcxproj讨论。
首先,该项目中主要包括三个文件:allocator.gyp、allocator_shim.h、allocator_shim.cpp;
allocator.gyp:一个用以构建和编译当前工程的文件;具体GYP构建工具可以查阅相关资料;我们将重点关注另外两个文件。
allocator_shim.h:SetupSubprocessAllocator安装子进程内存分配器,从环境中取字符串,获取环境变量的值,用以设置、转换指定的分配器并设置会环境中,其默认值为TCMALLOC,可修改;TCMallocDoMallocForTest,ExcludeSpaceForMarkForTest,ExcludeSpaceForMarkForTest主要用来暴露一些操作tcmalloc相关函数,测试用的。
allocator_shim.cpp:主要定义了分配器装换宏、分配器类型枚举:TCMALLOC、JEMALLOC、WINHEAP、WINLFH;其中前两个为第三方库分配器,后两个为windows下的分配器;WINHEAP为微软默认的标准分配器;WINLFH为低碎片堆分配器,详情可见:http://www.cnblogs.com/whyandinside/archive/2010/06/30/1768348.html或其他相关资料;另外对常见的malloc、free、realloc、_aligned_malloc、_aligned_free、_msize、运行时堆初始化_heap_init被重新定义,根据分配器类型,调用相应的分配器分配、释放、重分配策略;
此外allocator下的工程libcmt中,仅包含allocator.gyp和prep_libc.py,其中allocator.gyp已作介绍,prep_libc用以在生产目标文件了以后,连接前移除系统自带的那些操作内存分配的接口如:malloc、free、realloc、new、delete、new2等,使得当用户在其他工程使用该生成的库libcmt.lib时,使用的是该库提供的接口、分配策略(具体操作细节尚且不太明确,请见谅)。
allocator工程中还包括分配器测试工程、tcmalloc分配测试工程以及分配器扩展工程等,此处不再详细叙述。下一节将学习base公共通用库的containers,堆栈、列表、集合、以及Most Recently Used cache(最近使用缓存模板)。
Google之Chromium浏览器源码学习——base公共通用库(二)的更多相关文章
- Google之Chromium浏览器源码学习——base公共通用库(三)
本节将介绍base公共通用库中的containers,其包含堆栈.列表.集合.以及Most Recently Used cache(最近使用缓存模板). linked_list.h:一个简单的列表类型 ...
- Google之Chromium浏览器源码学习——base公共通用库(一)
Google的优秀C++开源项目繁多,其中的Chromium浏览器项目可以说是很具有代表性的,此外还包括其第三开发开源库或是自己的优秀开源库,可以根据需要抽取自己感兴趣的部分.在研究.学习该项目前的时 ...
- Google之Chromium浏览器源码学习——base公共通用库(四)
本文将介绍debug调试相关的内容,包括调试器.性能分析.堆跟踪.跟踪事件等: alias.h:Alias函数,提供防止载微软的编译器优化某参数变量的操作,内部通过#pragma optimize(& ...
- Golang源码学习:调度逻辑(二)main goroutine的创建
接上一篇继续分析一下runtime.newproc方法. 函数签名 newproc函数的签名为 newproc(siz int32, fn *funcval) siz是传入的参数大小(不是个数):fn ...
- Java并发包源码学习之AQS框架(二)CLH lock queue和自旋锁
上一篇文章提到AQS是基于CLH lock queue,那么什么是CLH lock queue,说复杂很复杂说简单也简单, 所谓大道至简: CLH lock queue其实就是一个FIFO的队列,队列 ...
- ThinkPHP5.0源码学习之缓存Cache(二)
一.使用Cache类 TP5.0框架默认使用的是File文件缓存驱动,可以修改全局配置文件convention.php中的type,将其改为Redis,这样使用的就是Redis缓存驱动了.
- Java并发包源码学习之AQS框架(四)AbstractQueuedSynchronizer源码分析
经过前面几篇文章的铺垫,今天我们终于要看看AQS的庐山真面目了,建议第一次看AbstractQueuedSynchronizer 类源码的朋友可以先看下我前面几篇文章: <Java并发包源码学习 ...
- Java并发包源码学习之AQS框架(一)概述
AQS其实就是java.util.concurrent.locks.AbstractQueuedSynchronizer这个类. 阅读Java的并发包源码你会发现这个类是整个java.util.con ...
- Spring源码学习
Spring源码学习--ClassPathXmlApplicationContext(一) spring源码学习--FileSystemXmlApplicationContext(二) spring源 ...
随机推荐
- VMware安装Centos7,已将该虚拟机配置为使用64为,却无法执行64位操作
在新建虚拟机之后,相信很多人都遇到了这个问题,这个问题的本质就是电脑是否支持虚拟化,虽然不是很清楚这是什么 解决方案就是,重启电脑(这边的电脑不是虚拟机而是主机),进入BIOS界面(不同电脑进入BIO ...
- ResourceHacker(4.5.30)单文件绿色汉化版
经常编译软件的人,肯定会使用一些编译和反编译的工具,ResourceHacker作为一款资源编译工具,非常的小巧好用,ResourceHacker没有任何广告,支持打开.exe..dll..scr.. ...
- Linux文件计数
1.当前目录下的文件数 ls -l |grep "^-"|wc -l 2.当前目录的目录树 ls -l |grep "^d"|wc -l 3.当前目录文件数包含 ...
- bzoj 1305 dance跳舞
最大流. 首先二分答案,问题转化为x首舞曲是否可行. 考虑建图,对每个人建立三个点,分别表示全体,喜欢和不喜欢. 源点向每个男生全体点连一条容量为x的边. 每个男生整体点向喜欢点连一条容量为正无穷的边 ...
- Extjs 知识体系1-dom操作
操作dom 主要是Ext.element,主要是简单的操作 Ext.dom.CompositeElement // 操作dom集合 ps:Extjs 使用字面量{} 形式,不支持链式操作 一.获取元素 ...
- Java细粒度锁实现的3种方式
最近在工作上碰见了一些高并发的场景需要加锁来保证业务逻辑的正确性,并且要求加锁后性能不能受到太大的影响.初步的想法是通过数据的时间戳,id等关键字来加锁,从而保证不同类型数据处理的并发性.而java自 ...
- 100 个 Linux 常用命令大全
1.ls [选项] [目录名 | 列出相关目录下的所有目录和文件 -a 列出包括.a开头的隐藏文件的所有文件 -A 通-a,但不列出"."和".." -l 列出 ...
- loadrunner关联取参--响应值unicode编码处理过
背景:做电商提交订单,需要获取订单号,然后进行支付.状态变更等操作 submitOrder() { lr_think_time(); /* 提交订单 */ /* specsId:规格ID,hyh_go ...
- jQuery 复习
jQuery 复习 基础知识 1, window.onload $(function(){}); $(document).ready(function(){}); 只执行函数体重的最后一个方法,事 ...
- [Java] JSP笔记 - Java Bean
一. Java Bean 是什么? Java Bean 其实就是一个符合特定规则的 Java Class.这些规则包括: 使用 public 声明的公用类 属性使用public 的get,set方法访 ...