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源 ...
随机推荐
- 【转】Java面试题全集2.2(上)
146.什么是IoC和DI?DI是如何实现的? 答:IoC叫控制反转,是Inversion of Control的缩写,DI(Dependency Injection)叫依赖注入,是对IoC更简单的诠 ...
- 解决:dpkg:处理 xxx (--configure)或E: Sub-process /usr/bin/dpkg returned an error code (1)
问题重现: 问题解决办法: #先备份原来的,然后重新新建 sudo mv /var/lib/dpkg/info /var/lib/dpkg/info.bak //现将info文件夹更名 sudo mk ...
- shiro登陆后没有返回设置的successUrl?
第一次学习shiro的时候,并没有发现很大的问题.但后来在做项目的时候,特别是当访问的url是iframe的页面的时候,session又过期了,跳转到登陆页,完成登陆操作后,返回了只有iframe的页 ...
- spring-事务管理
一个数据库事务是一个被视为单一的工作单元的操作序列.这些操作应该要么完整地执行,要么完全不执行.事务管理是一个重要组成部分,RDBMS 面向企业应用程序,以确保数据完整性和一致性.事务的概念可以描述为 ...
- Linux 下EXT2文件系统 —— 如何将蚂蚁和大象优雅的装进冰箱里
这一阵子真是偷懒,无时无刻不和自己身体中的懒癌做斗争.最终我还是被打败了,星期天两天几乎都是荒废过去的,在空闲的时候实际上我内心也是有点焦虑的,不知道去怎么度过这时间.学习吧又不想学习,看电视娱乐吧也 ...
- SAX与DOM
http://www.cnblogs.com/zhulin/archive/2012/05/03/2480962.html 在解析xml时(如浏览器解析html标签),主要存在两种方式:SAX模式和D ...
- java 部分注解说明(待补充)
内容 所代表的意思 @RequestMapping(params = "save") @ResponseBody 将内容或对象作为http响应正文返回,并调用适合HttpMessa ...
- sql中的inner join ,left join ,right join
左连接LEFT JOIN, 也就是说,左外连接的含义是限制连接关键字右端的表中的数据必须满足连接条件,而不关左端的表中的数据是否满足连接条件,均输出左端表中的内容.不满足连接条件的 ,连接字段栏位将对 ...
- Spring JdbcTemplate 方法详解
JdbcTemplate主要提供以下五类方法: execute方法:可以用于执行任何SQL语句,一般用于执行DDL语句: update方法及batchUpdate方法:update方法用于执行新增.修 ...
- 【转】JavaWeb MVC
-------------------------------------------------------------------------------------------------- 1 ...