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源 ...
随机推荐
- OpenLayers的定制
最近因为工作的需要,把主流的的一些GIS的javascript库看了一遍,主要是ArcGIS Server API for Javascript,Openlayers和Leaflet. 先说说ArcG ...
- C#重构之道
定义 重构的定义:在不改变软件可观察行为的前提下,改善其内部结构. 其中,不改变软件行为,是重构最基本的要求.要想真正发挥威力,就必须做到“不需了解软件行为”. 如果一段代码能让你容易了解其行为,说明 ...
- apache 多网站日志配置禁止ip访问
#禁止IP访问服务器AcceptFilter http noneAcceptFilter https none<VirtualHost 192.168.1.220>ServerName 1 ...
- webmagic 增量爬取
webmagic 是一个很好并且很简单的爬虫框架,其教程网址:http://my.oschina.net/flashsword/blog/180623 webmagic参考了scrapy的模块划分, ...
- 好用的开源web系统总结
1.论坛 phpwind 一个用wind框架写的论坛 discuz 社区动力 论坛 2.商城 Ecshop 商城腾讯的开源商城项目 一款B2C独立网店系统,系统是基于PHP语言及MYS ...
- 获取APP最新版本的接口案例
思路: 开发初期.安卓的应用可能没有上传到应用市场,可以把应用apk放到服务器上,供用户下载.把对应用的版本信息整理成为一个XML文件,放到服务器上,通过接口读取xml文件,获取有版本信息,然后安卓端 ...
- 原生JS常用代码汇总
数组相关 var codes = new Array( ); //创建数组codes.length //数组长度 动态插入数组 codes.push(value);
- 如何删除xcode项目中不再使用的图片资源
1. 利用工具 下载地址 http://jeffhodnett.github.io/Unused/ 运行效果如下 2. 通过终端 执行 shell 命令 a. 第一步建立.sh 文件 如 ...
- fzoj1314 You are my brother
题目描述 Little A gets to know a new friend, Little B, recently. One day, they realize that they are fam ...
- css3过渡效果