青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 119  文章 - 290  trackbacks - 0

博客搬家了哦,請移步
叫我abc

常用鏈接

留言簿(12)

隨筆分類

我的博客

搜索

  •  

積分與排名

  • 積分 - 306391
  • 排名 - 84

最新評論

閱讀排行榜

cache_flush算是這個庫最糟糕的一段代碼了,總共有100多行,縮進糟糕,做很多不同的工作。我就納悶,為什么不抽些子函數出來,這樣的代碼基本上不具備維護價值,因為自己重寫一次,比搞明白這個函數有趣多了。
由于這個函數實在太長,所以不一次全貼上來,一部分一部分的看吧。

qsort(E.cache,CACHE_SIZE,sizeof(struct cache_node),cache_node_cmp);

//----------------------------------------
static int
cache_node_cmp(
const void *a,const void *b)
{
    
const struct cache_node *ca=(const struct cache_node *)a;
    
const struct cache_node *cb=(const struct cache_node *)b;
    
if (ca->parent != cb->parent) {
        
return cb->parent - ca->parent;
    }

    
if (ca->parent == -1 ) {
        
return 0;
    }

    
return (ca->child & ~ UNSET_MASK) - (cb->child & ~UNSET_MASK);
}
首先,對 E.cache進行排序,比較子是cache_node_cmp。
return cb->parent - ca->parent ,是用 cb減去ca的,因此首先根據parent_id進行降序排序。注意,在這一比較結果中,如果ca->parent = -1,那么比較結果為正,空閑節點ca往數組右邊移動;如果cb->parent = -1,那么比較結果為負,空閑節點cb還是會處在數組右邊。
為什么要注意這個呢?因為本次排序的一個結果就是,那些空閑節點都集中到了cache數組的右邊,只要遍歷cache的過程中遇到了第一個空閑節點,那么剩下的必然都是空閑節點了。
當然要達成這個排序結果,還需要下面的這步,if (ca->parent == -1 ) {return 0;}
比較子的最后一句,在parent_id相同的情況下,按child_id升序排序。

E.cache經過排序后,呈現出以下狀況:
1.根據parent_id呈降序排序,并且parent_id相同的節點緊挨在一起
2.空閑的cache節點全部都排在了數組的右邊
3.parent_id相同的節點,按child_id升序排序

    while (i<CACHE_SIZE) {

        
if (parent==-1{
            
return;
        }
排序之后,就是遍歷有序的cache數組。可以看到排序的效果了,當parent_id = -1的時候,就只剩下空閑的cache_node,因此可以退出遍歷。

        head=&E.cache[i];
        next
=head;
        sz
=0;

        
while (next->parent == parent && i<CACHE_SIZE) {
            sz 
+= 1 - UNSET_MASK_BIT(next->child);
            
++next;
            
++i;
        }
這一段代碼,是統計同一parent_id下child的數目。因為有些child_id被標記了 UNSET_MASK,因此這種cache節點就不用統計到總數中了。其中UNSET_MASK_BIT是位移操作,如果child被標記了UNSET_MASK,那么位移的結果就是1,1-1=0,也就沒有統計到總數中了。

struct node *node=&E.pool[parent];
children
=node->u.n.children;
統計了parent擁有的child之后,接下來就是要把這些child記錄到parent的數據結構上了。這里不得不回顧一下struct node的定義,上次看的時候,并沒有探討struct link *children是做什么的,現在可以看看link的定義
struct link {
    
int number;
    
int children[1];
}
;
這個結構就是parent用來記錄其所有child_id的地方。其中number用來記錄child的總數量,而children則是一個整數數組,用來記錄所有的child_id。
cache_flush剩下的操作,就是把新的child_id添加到children中去,當然其中包含其他一些細節處理。這里先把這些東西交代清楚,因為其后的代碼將是比較難以理解的,我仍不是十分的明白。
posted on 2008-09-15 21:34 LOGOS 閱讀(2157) 評論(1)  編輯 收藏 引用

FeedBack:
# re: 垃圾收集的那點事(E) 2008-09-16 10:04 zuhd
寫的不錯,云風這段代碼是用c實現的,讀起來確實有點晦澀,作者分析的精神很贊!  回復  更多評論
  

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              羞羞答答国产精品www一本| 欧美顶级艳妇交换群宴| 久久精品国产一区二区三| 亚洲少妇一区| 99国产精品久久久久久久久久 | 欧美性视频网站| 欧美日韩ab片| 国产欧美欧洲在线观看| 国产亚洲精品久久飘花| 黄色成人在线网址| 91久久午夜| 亚洲天堂成人| 久久精品亚洲精品国产欧美kt∨| 久久久久天天天天| 亚洲国产另类精品专区| 亚洲经典在线看| 亚洲天堂视频在线观看| 久久黄色级2电影| 欧美激情一区二区三区四区| 欧美视频在线观看 亚洲欧| 国产一级揄自揄精品视频| 亚洲国产你懂的| 亚洲欧美高清| 欧美激情第二页| 亚洲综合不卡| 欧美激情一区二区三区四区 | 欧美精品日韩综合在线| 国产精品综合| 99成人在线| 久久亚洲国产精品一区二区| 亚洲人成人一区二区在线观看| 亚洲欧美国产精品va在线观看 | 亚洲麻豆av| 久久精品视频在线观看| 日韩天堂在线观看| 久久色中文字幕| 国产精品亚洲网站| 夜夜嗨av一区二区三区| 久久伊人亚洲| 亚洲欧美日韩综合| 欧美色偷偷大香| 欧美一区二区三区视频在线| 蜜桃久久av一区| 国产麻豆91精品| 99精品视频一区二区三区| 久久综合九色欧美综合狠狠| 亚洲一区二区在线看| 欧美精品七区| 亚洲理伦电影| 欧美国产第二页| 久久国产综合精品| 国产亚洲精品高潮| 欧美在线在线| 亚洲欧美国产77777| 国产精品草草| 在线视频中文亚洲| 日韩午夜三级在线| 欧美日韩免费一区| 在线一区二区三区四区| 91久久久一线二线三线品牌| 久久亚洲春色中文字幕久久久| 国内精品伊人久久久久av一坑| 欧美一区中文字幕| 亚洲综合激情| 国产欧美一区二区视频| 欧美在线日韩精品| 久久大逼视频| 尤物yw午夜国产精品视频| 久久婷婷久久| 久久婷婷蜜乳一本欲蜜臀| 在线成人中文字幕| 亚洲第一区中文99精品| 欧美二区不卡| 亚洲伊人色欲综合网| 亚洲一区在线观看视频| 国产精品一区二区久久精品| 欧美主播一区二区三区美女 久久精品人| 99国产麻豆精品| 国产精品人人做人人爽| 欧美一区日韩一区| 久久躁日日躁aaaaxxxx| 亚洲毛片在线免费观看| 99re8这里有精品热视频免费| 欧美三日本三级少妇三99| 亚洲欧美精品伊人久久| 午夜精品久久久久久99热软件| 黄色精品一二区| 亚洲第一成人在线| 欧美三级黄美女| 久久婷婷丁香| 欧美日韩免费观看一区二区三区| 午夜日韩电影| 欧美成黄导航| 欧美在线免费一级片| 免费成人高清| 欧美一区二区日韩一区二区| 久热精品视频| 亚洲一区精品电影| 久久精品国产一区二区三区免费看 | 久久久91精品国产一区二区三区 | 国产精品视频精品视频| 久久久精品国产一区二区三区 | 亚洲视频免费看| 一区二区视频免费完整版观看| 亚洲国产欧美不卡在线观看| 国产精品免费一区二区三区观看| 男人的天堂亚洲在线| 欧美丝袜第一区| 欧美国产第一页| 国产亚洲一区二区三区在线播放 | 欧美在线免费视屏| 欧美福利电影网| 久久精品一区蜜桃臀影院 | 欧美顶级少妇做爰| 国产精品推荐精品| 亚洲高清不卡| 国内精品美女在线观看| 在线视频欧美一区| 亚洲欧洲日本mm| 久久久久国产一区二区三区四区| 亚洲在线观看| 欧美日韩国产在线播放| 欧美激情网站在线观看| 黄色成人av在线| 久久国产精品久久w女人spa| 午夜伦欧美伦电影理论片| 欧美日韩精品免费观看视频| 欧美成人高清| 亚洲大胆在线| 久久久久高清| 久久日韩精品| 狠狠久久亚洲欧美| 久久激情五月激情| 浪潮色综合久久天堂| 国产综合网站| 久久久精品国产免大香伊 | 好看的亚洲午夜视频在线| 亚洲欧美激情精品一区二区| 亚洲一区二区影院| 国产精品久久久久久久久久三级 | 欧美日韩在线一区| 日韩一级黄色大片| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧美久久精品午夜青青大伊人| 欧美激情第一页xxx| 亚洲精品日韩一| 欧美精品一级| 在线性视频日韩欧美| 国产精品99久久99久久久二8| 欧美日韩在线播放三区| 在线视频日韩精品| 久久久99国产精品免费| 在线观看国产一区二区| 久久网站免费| 一区二区免费在线播放| 欧美日本中文字幕| 亚洲午夜电影网| 久久婷婷国产麻豆91天堂| 伊人久久婷婷| 欧美国产在线观看| 99re66热这里只有精品3直播| 性欧美18~19sex高清播放| 国产视频在线一区二区 | 一本色道久久综合亚洲精品不 | 中文精品视频一区二区在线观看| 欧美日韩影院| 欧美综合国产| 亚洲娇小video精品| 午夜精品理论片| 在线观看精品| 国产精品久久国产愉拍 | 日韩一区二区免费高清| 欧美一级理论片| 在线国产欧美| 欧美三区不卡| 久久亚洲精选| 一本久道久久综合狠狠爱| 久久精品99久久香蕉国产色戒| 亚洲国产美女| 国产精品私拍pans大尺度在线| 久久免费黄色| 亚洲午夜国产一区99re久久| 欧美刺激性大交免费视频| 午夜精品久久| 亚洲理论在线| 在线播放亚洲| 国产精品无码永久免费888| 免费高清在线一区| 午夜欧美不卡精品aaaaa| 亚洲日本一区二区| 农夫在线精品视频免费观看| 亚洲欧美一区二区精品久久久| 亚洲日本一区二区三区| 黄色av一区| 国产综合色产| 国产一区二区三区久久| 国产精品国产三级国产专播品爱网| 欧美/亚洲一区| 久久久蜜桃精品| 久久福利视频导航|