<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[vector03的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/vector03</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; vector03]]></copyright><item><title><![CDATA[如何使用repo管理本地私有仓库]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/83095821</link><guid>https://blog.youkuaiyun.com/vector03/article/details/83095821</guid><author>vector03</author><pubDate>Tue, 16 Oct 2018 20:26:40 +0800</pubDate><description><![CDATA[目录

1. 引导脚本

2. 搭建仓库

3. repo without gerrit

1. 引导脚本

repo安装前需要首先下载引导脚本,


mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo &amp;gt; ~/bin/repo
chmod a+x ~/bin/rep...]]></description><category></category></item><item><title><![CDATA[windows下使用cygwin搭建git服务器]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/53243436</link><guid>https://blog.youkuaiyun.com/vector03/article/details/53243436</guid><author>vector03</author><pubDate>Sun, 20 Nov 2016 20:23:01 +0800</pubDate><description><![CDATA[在windows上搭建git服务器需要分两步,

首先, 要在windows环境下实现ssh服务器, 以及通过public key的authorized登陆.

其二, 要在windows下安装模拟GNU环境的git版本或者自带gui shell的git版本.

由于windows下面原生不支持ssh协议, 网上多数教程都是通过一些第三方的ssh server软件实现ssh登陆. 另外通过msys...]]></description><category></category></item><item><title><![CDATA[binder传递fd的机制]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/51034021</link><guid>https://blog.youkuaiyun.com/vector03/article/details/51034021</guid><author>vector03</author><pubDate>Fri, 01 Apr 2016 09:44:03 +0800</pubDate><description><![CDATA[进程获得的fd是进程fd table中的index, 在fd table中记录了file指针, file对象保留在kernel空间中. 

因此不同进程间传递fd本身并没有什么意义. 



binder通过parcel传递fd的本质, 是将源进程的fd table中对应项指针, 记录到target进程的fd table中.
client端add的fd和server端读出的是两个值.]]></description><category></category></item><item><title><![CDATA[Rvalue Reference In Cxx11]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/50852918</link><guid>https://blog.youkuaiyun.com/vector03/article/details/50852918</guid><author>vector03</author><pubDate>Fri, 11 Mar 2016 08:25:00 +0800</pubDate><description><![CDATA[Rvalue Reference In Cxx11

author: vector03
mail:   mmzsmm@163.com


1. copy constructor与临时对象.

当函数返回一个对象时, 
CFoo getFoo(args...) {
    CFoo ret(...);
    ...
    ...
    return ret;
}


如]]></description><category></category></item><item><title><![CDATA[Inside of Jemalloc]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/50634802</link><guid>https://blog.youkuaiyun.com/vector03/article/details/50634802</guid><author>vector03</author><pubDate>Thu, 04 Feb 2016 14:11:38 +0800</pubDate><description><![CDATA[Jemalloc最初是Jason Evans为FreeBSD开发的新一代内存分配器, 用来替代原来的
phkmalloc, 最早投入使用是在2005年. 到目前为止, 除了原版Je, 还有很多变种
被用在各种项目里. Google在android5.0里将bionic中的默认分配器从Dl替换为Je,
也是看中了其强大的多核多线程分配能力.

同经典分配器, 如Dlmalloc相比, Je在基本思路和实现上存在明显的差别. 比如,
Dl在分配策略上倾向于先dss后mmap的方式, 为的是快速向前分配, 但Je]]></description><category></category></item><item><title><![CDATA[dlmalloc 2.8.6 源码详解(7)]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/41314055</link><guid>https://blog.youkuaiyun.com/vector03/article/details/41314055</guid><author>vector03</author><pubDate>Thu, 20 Nov 2014 15:35:58 +0800</pubDate><description><![CDATA[释放的主要过程就是根据用户传入的payload, 找到chunk指针, 然后分别检查前一个和后一个chunk是否可以合并. 这里唯一需要注意的就是与dv和top这些特殊chunk的交互.

基本流程如下,

1. 通过用户传入的mem指针计算出chunk指针p. 如果FOOTERS打开, 则通过magic计算出其所属的mspace指针, 并进行校验. 

2. 若p是通过direct mmap生成的, 则还原其头尾的fake chunk后直接munmap释放并结束. 详细内容请参考3.4.2小节的说明.

]]></description><category></category></item><item><title><![CDATA[dlmalloc 2.8.6 源码详解(6)]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/41205355</link><guid>https://blog.youkuaiyun.com/vector03/article/details/41205355</guid><author>vector03</author><pubDate>Mon, 17 Nov 2014 10:40:13 +0800</pubDate><description><![CDATA[基本上sys_alloc分为四个步骤,

1. 首先检查请求大小nb是否超出mmap_threshold的阈值. 如果是, 则放弃由分配器管理, 直接在mmap区开辟, 原因前面说过, 不再赘述.

2. 根据mspace设定及当前top space的使用情况, 向系统申请一块适当的内存. 

Dlmalloc按照下面的顺序由主到次开辟,

第一, 如果允许MORECORE, 则优先通过MORECORE开辟连续内存空间.]]></description><category></category></item><item><title><![CDATA[dlmalloc 2.8.6 源码详解(5)]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/41114611</link><guid>https://blog.youkuaiyun.com/vector03/article/details/41114611</guid><author>vector03</author><pubDate>Fri, 14 Nov 2014 10:48:14 +0800</pubDate><description><![CDATA[本章节介绍dlmalloc的分配算法和实现. 由于存在多mspace的情况, dlmalloc使用了两套API. 一套对应默认的mspace, 以dl前缀开头, 如dlmalloc, dlrealloc等. 如果创建了自定义的mspace, 则使用mspace开头的API, 如mspace_malloc, mspace_realloc等. 但两套API在基础算法上是一致的. 我们就以默认的API为主要对象介绍.]]></description><category></category></item><item><title><![CDATA[dlmalloc 2.8.6 源码详解(4)]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/41074005</link><guid>https://blog.youkuaiyun.com/vector03/article/details/41074005</guid><author>vector03</author><pubDate>Thu, 13 Nov 2014 09:54:07 +0800</pubDate><description><![CDATA[在dlmalloc的内部结构中,除了基础的chunk外,还存在一种粒度更粗的结构,称为区段(segment).

之所以需要额外引入这种数据结构是为了提升对非连续内存的管理能力. dlmalloc将连续内存划分到一个segment中管理,而段与段之间则是不连续的,所有的段都由一个mspace统一去管理.如果用户程序创建了多个mspace,这些mspace内部包含的segment有可能在地址上连续,但实际归属于不同的空间.]]></description><category></category></item><item><title><![CDATA[dlmalloc 2.8.6 源码详解(3)]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/41008671</link><guid>https://blog.youkuaiyun.com/vector03/article/details/41008671</guid><author>vector03</author><pubDate>Tue, 11 Nov 2014 11:25:43 +0800</pubDate><description><![CDATA[前面介绍过, dlmalloc将小于256字节的内存划分为small chunk, 256字节以上的划分为tree chunk.对这两种chunk的管理也采用不同方式. small chunk使用small bins管理,采用更精确的标记方法,而tree chunk用tree bins管理,较之使用相对粗放的管理方式.这种划分方法基于这样一种经验性的认知,即小块内存总是连续而频繁的分配,因此需要更加精确匹配,否则将产生时间和空间上的缺失,相反大块内存则往往一次性的分配,由此产生的代价和浪费相对较低.]]></description><category></category></item><item><title><![CDATA[dlmalloc 2.8.6 源码详解(2)]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/40979181</link><guid>https://blog.youkuaiyun.com/vector03/article/details/40979181</guid><author>vector03</author><pubDate>Mon, 10 Nov 2014 12:56:09 +0800</pubDate><description><![CDATA[本文章由vector03原创, 转载请注明出处.
邮箱地址: mmzsmm@163.com, 欢迎来信讨论.
 
2. 标记结构
本章节将介绍基本的内存标记结构,
包括chunk, tree chunk, sbin, tbin, segment, mstate等.
这些重要的机构组成了dlmalloc分配算法的基础.
2.1 chunk
chunk是dlmalloc中最基本的一种结]]></description><category></category></item><item><title><![CDATA[dlmalloc 2.8.6 源码详解(1)]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/40977679</link><guid>https://blog.youkuaiyun.com/vector03/article/details/40977679</guid><author>vector03</author><pubDate>Mon, 10 Nov 2014 12:34:37 +0800</pubDate><description><![CDATA[本文章由vector03原创, 转载请注明出处.
邮箱地址]]></description><category></category></item><item><title><![CDATA[一个简单的实验，Java数组遍历]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/18922701</link><guid>https://blog.youkuaiyun.com/vector03/article/details/18922701</guid><author>vector03</author><pubDate>Tue, 04 Feb 2014 11:53:42 +0800</pubDate><description><![CDATA[Java提供了多种数组遍历的方法，从传统的for while到新的foreach. 那么，倒底该选择哪种遍历方式呢，也许很多人不会刻意关心这类问题，这个东西完全凭个人习惯.

本人以前也不曾注意过，只不过在玩了project euler之后，逐渐开始关心起java程序的性能来(我也不再用C++写了，这种小游戏没必要).
 
于是乎就做了一个对比试验，在数组中放置从1到1m的数，然后将它们累]]></description><category></category></item><item><title><![CDATA[使用表驱动技术优化程序结构]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/6444050</link><guid>https://blog.youkuaiyun.com/vector03/article/details/6444050</guid><author>vector03</author><pubDate>Wed, 25 May 2011 09:40:00 +0800</pubDate><description><![CDATA[1.前言 所谓的表驱动技术实际上是一种回调函数(callback function)，它能够使调用者在完全不知道细节的情况下完成复杂的操作。使用这种技术不但可以使你的代码更加紧凑，还能够降低各个模块的耦合程度，优化程序结构。表驱动的适用范围很广，无论是底层驱动开发，还是上层通讯都可以用到，甚至Microsoft著名的MFC中的消息映射也使用了这一技术。本文结合一个例子介绍了如何在实际工程中使用该技术。]]></description><category></category></item><item><title><![CDATA[MFC下的日志系统开发]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/6419199</link><guid>https://blog.youkuaiyun.com/vector03/article/details/6419199</guid><author>vector03</author><pubDate>Sat, 14 May 2011 09:10:00 +0800</pubDate><description><![CDATA[中大型软件项目中，日志系统是不可或缺的组成部分。尤其随着软件规模越来越大，内部结构越来越复杂，日志调试成为一种重要的调试方法。本文介绍了一个通用，高效，简洁的日志系统的设计思路。文章分两部分，一部分是负责日志记录的CTLog类，另一部分是负责日志显示CTLogEdit类。
]]></description><category></category></item><item><title><![CDATA[以有序链表构成的开放式散列表]]></title><link>https://blog.youkuaiyun.com/vector03/article/details/6277792</link><guid>https://blog.youkuaiyun.com/vector03/article/details/6277792</guid><author>vector03</author><pubDate>Fri, 25 Mar 2011 14:37:00 +0800</pubDate><description><![CDATA[1. 前言在复杂编程中，常常遇到查找问题，如何能更快更简单的找到我们需要的数据是一个经典问题。在各种查找方法中最简单的是使用数组或者链表，进行线性查找，但是往往效率比较低。因为如果要查找的数据恰好在线性表前面那么自然很快就能得到结果，而目标处在最后则要耗费很多时间去挨个查找。另一方面，大量的线性查找也意味着我们的程序当中要嵌套大量的循环语句，这本身对于程序可读性和运行效率都是不利的。我个人不建议在程序中循环或者分支语句超过三层，多了就会让人感觉代码像一团浆糊，单单辨别划分程序块的括号就很困难了。    为了]]></description><category></category></item></channel></rss>