簡易的字串記憶體池實現

2021-06-21 05:07:27 字數 1094 閱讀 5602

有很多這樣的應用場景:不停的產生一些字串,並串聯在一起,最後一起輸出。這種場景的特點是,最終字串的長度是不確定的。借鑑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 設定記憶體池中取出...