9 deusomax

尚未进行身份认证

暂无相关简介

等级
TA的排名 10w+

Mojolicious 框架--- 源代码分析

为什么学习perl,因为perl难,为什么难了还要学,因为学会了做事情就简单了Mojolicious框架真的很酷,1行代码可以完成其他语言100行才能完成的事情,各种奇异符号会让你干瞪眼,看代码需要猜,需要反复,需要思考,在这之前我只会自己用perl写一些工具,不知道继承,不知道对象,也没有看书,所以我不懂得时候就盯着代码看,一直盯着,真的有效果,查单词变量的原始英文翻译,猜,真的能猜中。M...

2018-08-31 10:08:06

jemalloc横向分析(六)tcache_event事件执行

tcache_alloc_small最后调用了tcache_event里面tcache->ev_cnt++;当tcache->ev_cnt==TCACHE_GC_INCR(211)时/* *TCACHE_GC_SWEEPistheapproximatenumberofallocationeventsbetween *fullGCsweeps. In

2017-08-11 15:31:54

jemalloc横向分析(五)tcache分配内存

先分析一个结构体arena_bin_s,它隶属于一个area,也可以理解成,它代表了这个areastructarena_bin_s{   /*   *Alloperationsonruncur,runs,andstatsrequirethatlockbe   *locked. Runallocation/deallocationarep

2017-08-03 15:21:11

jemalloc横向分析(四) tcache分配内存中使用到的位图bitmap

/* *Read-onlyinformationassociatedwitheachelementofarena_t'sbinsarray *isstoredseparately,partlytoreducememoryusage(onlyonecopy,rather *thanoneperarena),butmainlyto

2017-08-02 15:51:46

jemalloc横向分析(三) arena_run_split_large使用分配的chunk存放tcache

chunk分配完成,管理每一页的mapbits和misc信息设置完成,然后就是分配一块内存放tcache相关的信息了tcache相关信息的大小前面已经计算过,经过对齐和sa2u,大小是32768,0x8000,需要8页,但是arena_malloc_large函数分配时加上了large_pad这个大小是1页,所以总共使用了9页,大小是0x9000,36864这就是arena_run_s

2017-07-26 15:55:15

jemalloc横向分析(二) rtree分析

rtree实现./include/jemalloc/internal/rtree.h./src/rtree.c用法./test/unit/rtree.c/*这个基数树是为了实现连接元数据和jemalloc当前拥有的chunks这一单个目的,而量身定做的 *Thisradixtreeimplementationistailoredtothesing

2017-07-25 14:54:45

jemalloc横向分析(一) 核心结构体

第一个结构体arena_sstructarena_s{   /*Thisarena'sindexwithinthearenasarray.*/   unsigned      ind;该结构在arenas数组中的索引   /*   *Numberofthreadscurrentlyassignedtothisarena.

2017-06-30 10:50:46

Jemalloc free的过程

redis第一次调用free函数(gdb)bt#0 je_free(ptr=0x7ffff661b000)atsrc/jemalloc.c:1837#1 0x000000000043194einzfree(ptr=0x7ffff661b000)atzmalloc.c:204#2 0x0000000000423ea7indictRehash(d=0x7f

2017-06-26 12:25:33

Jemalloc malloc的分配过程,以redis的第一次内存分配malloc(1)展开

(gdb)bt#0 je_malloc(size=1)atsrc/jemalloc.c:1422#1 0x00000000004316b3inzmalloc(size=1)atzmalloc.c:125#2 0x000000000043197cinzstrdup(s=0x6cf8c5"")atzmalloc.c:215#3 0x00000000

2017-06-08 18:12:44

Linux系统源代码升级glibc到最新版本2.25.90(正在开发的版本)

网上关于升级glibc的文章不少,但没有一篇能成功的,本人被坑过无数次,以至后来能避就避,今天自己在虚拟机上实验,终于成功,我把升级过程记录下来,为网友提供完整的升级方法。升级是在ubuntu下进行的,但是其他系统升级也类似:准备两个Linux系统,一个是你要升级glibc的系统B,另一个B用于glibc升级失败之后恢复,它能挂载升级失败的系统的根文件系统,恢复失败的系

2017-04-13 18:52:19

Jemalloc 初始化(二) index2size和size2index解析

前面没有分析完 Jemalloc初始化,是因为遇到了一个表不得其解,所以停下来分析,这是一个精妙的算法,通过index可以算出size,通过size也可以算出index。我是从size推算index开始研究的注释的数是在以下推导的基础上填的#define   SIZE_CLASSES\ /*index,lg_grp,lg_delta,ndelta,bin,lg_

2017-04-07 15:43:11

Jemalloc 初始化

因为redis用到了jemalloc,所以有幸研究jemalloc的源代码,我们熟悉的内存管理函数无非就两个,一个是malloc,一个是free,它们内部是如何工作的,平时很少有机会得知,因为这两个函数被编译在glibc中,编译glibc都是很难的事,更何况去debug它,不debug源代码,仅靠文档知识,也只是一知半解,人云亦云。所以决定彻底的debug一遍jemalloc的代码。debug

2017-04-07 11:59:29

Redis-3.2.8 Makefile分析

Redis的makefile主要是src目录下的makefile,编译的日志也不多,300多行,Redis的makefile用到了make的一些高级规则默认的配置文件.make-settings,给CC,MAKE上色,如果执行makeV=1就不会看到CC上色.make-prerequisites定义的规则在默认的目标all之前执行,而且.make-prerequisites定义的

2017-04-01 15:46:42

c++在unix系统上访问ms sqlserver的方法

mssqlserver是微软出品,自然没有unix版本,对于c++来说,客户端也很少,最著名的是freetds,他有两种访问模式,一种就是ODBC的方式,还有一种是直连的方式。对于大部分开发者来说,减少配置,是一致的看法。所以本文介绍freetds直连sqlserver的方法。freetds提供了两个库,一是libsybdb,另一个是libct,两者都可以完成。但是如果直接使用fre

2017-03-23 17:42:07

基于boost asio的redis客户端redisclient

如果说c++11引领了C++编程的潮流,那么boost::asio则是最时尚,最fashion的设计。redisclient基于C++11实现,它没有像cpp_redis设计自己的异步框架,而是直接使用boostasio。redisclient的makefile写的不是很好,可能找不到boostset(CMAKE_LIBRARY_PATH${CMAKE_LIBRARY_PA

2017-03-13 19:04:03

cpp_redis几种client的区别

cpp_redis在example目录下提供了4个client,这4个client基本覆盖了cpp_redis的所有用法,每个client的架构和实现描述如下:redis_client纯异步执行,忽略返回值(他是有返回值的,当然也可以用,用于命令连写的方式),命令结果返回来执行回调函数future_client基于redis_client实现,返回值是future,返回fu

2017-03-08 12:03:10

redis的c++客户端cpp_redis代码分析

cpp_redis是一个基于c++11编写的redis客户端,比较简单,也比较强大,支持集群本篇分析是基于一个简单的set命令来展开的为了便于调试和查看代码运行轨迹,编译时用如下命令:cmake-DBUILD_EXAMPLES=true-DLOGGING_ENABLED=true.这是查看完CMakefile.txt后得出的cpp_redis使用了taco

2017-03-06 15:28:16

C++11可变数量模板参数可变类型模板参数并使用lamada函数调用使用范例

为了完成这个功能,耗费一整天。背景是需要到一张表中查询,条件不一样,但是都可以通过PreparedStatement_setXX设置,想体验一把C++11的高级模板特性,设计如下封装inlinevoidset_para(PreparedStatement_TprepStat,intidx,std::string&str){ PreparedStatement_

2017-01-13 16:28:11

CentOS release 6.6 (Final) 编译mesos-1.1.0

系统的库陈旧,主要工作就是安装依赖,而且不能yum安装(极少部分可以),需要源代码安装源代码大部分都编译不过,需要修改代码,有的需要修改M4宏,有的需要修改Makefile,有的需要将已经安装在/usr/lib下的库拷贝到/usr/lib64或者/usr/local/xxx/lib下面,有的makeinstall不会拷贝头文件,需要自己手工拷贝。这些依赖都是在configure

2016-12-28 13:48:31

nginx源代码分析 - 收到请求(一) accept处理事件

收到客户端请求epoll_wait返回events=1,ngx_connection_t *c=event_list[i].data.ptr;staticstructepoll_event *event_list;typedefunionepoll_data{   void        *ptr;   int          fd;

2016-12-01 14:37:20

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!