當前位置:編程學習大全網 - 源碼下載 - 服務器發送緩沖池的設計

服務器發送緩沖池的設計

內存池的做法理論在網上很容易找到,但卻真正可靠高效的實現,還真是鳳毛麟角,也許妳會說ACE,boost之類的現成實現,然而這些大家夥動輒就得找半天資料才能編譯通過,而提取使用起來就更麻煩了.如果自己實現,那工作量還真的不少,光就是測試就讓妳費盡心思了,更何況咱們的代碼不能保證不差過專家級的代碼,所以最好能有現成的公認

幸好的是,SGI STL實現了內存池(不要以為STL就壹定有內存池,C++標準可沒這樣說,vs的STL就沒有實現內存池,不信看看源碼)相對還是比較簡單的.

下面就說說我的做法:

1 .首先從 SGI 的網站下載官方源碼 : /tech/stl/download.html

解壓打開後有很多源碼文件,這裏只需要把: stl_config.h, stl_threads.h, sgi_stl_alloc.h 拿出來就行了.

真正的內存分配管理的源碼是在 sgi_stl_alloc.h, 然而因為 SGI STL是跨平臺的,所以會涉及到不少的編譯宏.

2. 打開 stl_config.h

找到下面針對Vc編譯器的宏開關, 先把 __STL_NEED_TYPENAME 宏關閉, 因為這個開關把 typename 定義為空, 所以到後面的"模糊"定義時類型時typename就不起作用,導致編譯不通過

// Microsoft compiler.

# if defined(_MSC_VER) && !defined(__ICL) && !defined(__MWERKS__)

# define __STL_NO_DRAND48

# define __STL_STATIC_CONST_INIT_BUG

//# define __STL_NEED_TYPENAME // 把這個註釋掉

# define __STL_NO_USING_CLAUSE_IN_CLASS

# define __STL_NO_FRIEND_TEMPLATE_CLASS

.....

3. 在 stl_config.h 裏定義宏: #define __STL_USE_STD_ALLOCATORS

這個宏是讓SGI的 std::allocator() 有效, 這是STL標準的分配器接口,要想讓vs2008使用這個分配器的話,就得把這個宏打開.

4. 修改命名空間名. 很多時候我們還是想使用vs自帶的STL(vc6除外),而只是使用SGI STL的 最近開發的壹個C++項目是針對性能進行優化的,所以在很多細節上不得不"咬文嚼字", 而C++其中強大的地方是對內存使用有很強的可控性, 而任何壹個C++項目都離不開對內存的管理,所以要進行內存管理的優化,而使用內存池是要考慮的.

本文來自CSDN博客,轉載請標明出處:/Practise_Think/archive/2009/11/24/4863553.aspx

  • 上一篇:Linux系統分析、裁減及RAMOS制作
  • 下一篇:關於電視劇《武林傳奇》
  • copyright 2024編程學習大全網