sqlite mem2.c debug模式下的統(tǒng)計(jì)直方圖

void **

void** array;
int arrayLen = 10;
array = (void**)malloc(arrayLen * sizeof(void*));

some_type_t* some_object_ptr;    
// The following two assignment are equivalent since in C,
// array[index] <=> *(array + index)
array[index] = (void*)some_object_ptr;
*(array + index) = (void*)some_object_ptr;

void *可以指向任何數(shù)據(jù)結(jié)構(gòu)的指針
stackoverflow void **

void * 中文博客

mem 統(tǒng)計(jì)直方圖 直方圖的實(shí)現(xiàn)

mem 分配中惧笛,統(tǒng)計(jì)直方圖的實(shí)現(xiàn)mem2.c

static void adjustStats(int iSize, int increment){# icrement的值為正或者負(fù)
  int i = ROUND8(iSize)/8;//以8為間隔
  if( i>NCSIZE-1 ){//大于800byte的統(tǒng)一歸在一個(gè)圖中
    i = NCSIZE - 1;
  }
  if( increment>0 ){
    mem.nAlloc[i]++;
    mem.nCurrent[i]++;
    if( mem.nCurrent[i]>mem.mxCurrent[i] ){
      mem.mxCurrent[i] = mem.nCurrent[i];
    }
}else{//釋放就減小
    mem.nCurrent[i]--;
    assert( mem.nCurrent[i]>=0 );
  }
}

mem結(jié)果中有一些結(jié)構(gòu)如下

...
int nAlloc[NCSIZE];      /* Total number of allocations */
int nCurrent[NCSIZE];    /* Current number of allocations */
int mxCurrent[NCSIZE];   /* Highwater mark for nCurrent */
...

對(duì)8向上取倍數(shù)#define ROUND8(x) (((x)+7)&~7) 向下取倍數(shù)#define ROUNDDOWN8(x) ((x)&~7)

為了讓代碼更有語意脐供。需要對(duì)代碼進(jìn)行包裝例如下面的代碼,也是解耦的一種做法

/*
** Round up a request size to the next valid allocation size.
*/
static int sqlite3MemRoundup(int n){
  return ROUND8(n);
}

Scratch memory用來進(jìn)行例如btree整理的時(shí)候阅悍,用的臨時(shí)內(nèi)存

look aside allocator slite 常常會(huì)分配一些很小的內(nèi)存來存放例如the names of tables and columns, parse tree nodes, individual query results values, and B-Tree cursor objects.等等,利用系統(tǒng)的malloc就會(huì)很浪費(fèi)cpu時(shí)間芭毙,所以開發(fā)出了一個(gè)相對(duì)高效的 look aside allocator

mem2.c 內(nèi)存管理

sqlite 內(nèi)存分配管理

  1. 分配失敗之后的管理挽铁。如果分配內(nèi)存失敗,會(huì)釋放掉祠饺,cache page越驻。在 pcache1AllocPage函數(shù)中實(shí)現(xiàn)
  2. 沒有內(nèi)存泄露,應(yīng)用程序負(fù)責(zé)銷毀
  3. 可以設(shè)置內(nèi)存使用限制∽号裕可以重復(fù)利用分配的cache
  4. zero-malloc option sqlite會(huì)先分配一個(gè)大的bulk memory记劈。然后在里面自己組織內(nèi)存分配
  5. 程序自定義,內(nèi)存分配程序
  6. 提供內(nèi)存統(tǒng)計(jì)功能
  7. sqltie最小化使用系統(tǒng)的malloc free

當(dāng)開啟 debug 模式之后并巍,會(huì)使用 instrumented memory allocator
有特殊的函數(shù)目木,來模擬out of memery

sqlite3_free 必須是之前sqlite3Malloc或者sqlite3_realloc函數(shù)返回的指針

sqlite3_realloc(X,N)重新組織之前分配的內(nèi)存,X是分配內(nèi)存的位置指針懊渡,如果x為空指針刽射,結(jié)果跟 allocatte下效果一樣.如果N為0就跟 free的效果一樣

sqlite3Malloc模式

當(dāng)使用bebug模式,會(huì)在系統(tǒng)提供的函數(shù)中剃执,提供wapper 會(huì)額外分配100byte 來防止防止超出邊界的哨兵誓禁。這100個(gè)byte 還會(huì)記錄測(cè)試腳本的名稱,方便測(cè)試

memsys5選項(xiàng)肾档,使用zero-malloc option 會(huì)事先分配一個(gè)大內(nèi)存自己管理摹恰,通常在嵌入式系統(tǒng)中會(huì)使用
memsys3類似zero-malloc 只是不提供嚴(yán)格的,memory fragmentation and breakdown mem3是 mem5的前身 . 建議所有希望zero-config的都應(yīng)該使用mem5而不是使用mem3 mem3很可能在未來從代碼庫中去掉 mem4mem6是實(shí)驗(yàn)性的代碼都被刪除了

默認(rèn)是memsys1 debug模式下是memsys2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怒见,一起剝皮案震驚了整個(gè)濱河市俗慈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌速种,老刑警劉巖姜盈,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異配阵,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)示血,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門棋傍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人难审,你說我怎么就攤上這事瘫拣。” “怎么了告喊?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵麸拄,是天一觀的道長。 經(jīng)常有香客問我黔姜,道長拢切,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任秆吵,我火速辦了婚禮淮椰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己主穗,他們只是感情好泻拦,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著忽媒,像睡著了一般争拐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上晦雨,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天陆错,我揣著相機(jī)與錄音,去河邊找鬼金赦。 笑死音瓷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的夹抗。 我是一名探鬼主播绳慎,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼漠烧!你這毒婦竟也來了杏愤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤已脓,失蹤者是張志新(化名)和其女友劉穎珊楼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體度液,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厕宗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了堕担。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片已慢。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖霹购,靈堂內(nèi)的尸體忽然破棺而出佑惠,到底是詐尸還是另有隱情,我是刑警寧澤齐疙,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布膜楷,位于F島的核電站,受9級(jí)特大地震影響贞奋,放射性物質(zhì)發(fā)生泄漏赌厅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一忆矛、第九天 我趴在偏房一處隱蔽的房頂上張望察蹲。 院中可真熱鬧请垛,春花似錦、人聲如沸洽议。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽亚兄。三九已至混稽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間审胚,已是汗流浹背匈勋。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膳叨,地道東北人洽洁。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像菲嘴,于是被迫代替她去往敵國和親饿自。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容