有很多這樣的應用場景:不停的產生一些字串,並串聯在一起,最後一起輸出。這種場景的特點是,最終字串的長度是不確定的。借鑑ngx_poop_t的實現,做乙個簡單的記憶體池,**如下:
typedef struct buf_list_s buf_list_t;
struct buf_list_s ;
buf_list_t* buf_init(int size,int resolution)
char *buf_sprintf(buf_list_t *head,char *fmt,...) /* 類似於vsprintf,用起來方便 */
va_start(args,fmt);
vsprintf(current->str+current->used,fmt,args);
va_end(args);
lr = strlen(current->str+current->used);
current->used += lr;
return current->str+current->used-lr;
}void buf_print(buf_list_t *head)
}void buf_free(buf_list_t *head)
}
這樣,使用起來就很快捷方便了:
int main()
buf_print(head);
buf_free(head);
return 0;
}
簡易記憶體池的實現
1.記憶體池的引入 實際運用當中,如果我們需要申請一塊空間,我們一般都會new一塊空間 在c語言裡會用到malloc 我們知道他們兩個的共同點就是在堆上申請空間,堆上的空間會比棧上的大一些 在windows的vs環境下,棧的預設大小是1mb,但是可以自己調整 所以我們可以自己去申請自己需要的大小 當...
簡易記憶體池的實現
參考 一書中的條款10 如果寫了operator new就要同時寫operator delete 寫了乙個簡易的記憶體池,說白了就是事先分配一塊記憶體空間作為記憶體池,每次new物件的時候,直接從這裡取記憶體,delete的時候將記憶體 到記憶體池中,很簡單,廢話就不說了,直接看 include s...
簡易記憶體池(物件池)的實現
pragma once include include include 物件池的實現 針對於乙個知道型別的物件 我們通過物件池 來比較普通向記憶體中申請空間 和我們直接向我們的記憶體池中申請空間的效能對比 template class t,size t initnum 10000 設定記憶體池中取出...