LinuxDev 板


LINE

這幾天對libapr稍為好奇了一下:) 大致上試用了一下memory pooling的功能。 libapr - apache portable runtime 是一整組c/cpp用的library <% The mission of the Apache Portable Runtime (APR) project is to create and maintain software libraries that provide a predictable and consistent interface to underlying platform-specific implementations. The primary goal is to provide an API to which software developers may code and be assured of predictable if not identical behaviour regardless of the platform on which their software is built, relieving them of the need to code special-case conditions to work around or take advantage of platform-specific deficiencies or features. %> 簡單的來講,就是提供一套library讓c/cpp在做port到各平台時 所產生的疼痛達到最小的目的 ============================================================ 謎樣的分隔線 = 而什麼是memory pool http://en.wikipedia.org/wiki/Memory_pool 簡單說,我們雖然可以在需要memory時用malloc/new等方式即時取得。但是在配置記憶 體的代價(程式與系統要資源的溝通時間與轉手的時間)仍是不容小覷,所以較有效率的 方法是事件配置一大塊memory,在需要的時候直接由這些區塊中取用。在沒有超過預設 配置大小的前提下,與系統打交道的時間應該只剩預配與交還的時間:) ============================================================ 謎樣的分隔線 = 請先準備材料: a your favorite editor (or ide) c/cpp compiler install libapr ============================================================ 謎樣的分隔線 = 一點使用前先講的小[常]識,在用libapr時,不管你要做什麼之前一定要先呼叫: rect = apr_initialize (); 他有一個傳回值,type是apr_status_t 可以用下列判斷成功與否 if (rect != APR_SUCCESS) { assert (0); return -1; } 用完了之後要叫一下: apr_terminate (); ============================================================ 謎樣的分隔線 = 為了使我們compile順利,請先查一下你的header與lib放在那叫什麼名字 依俺的為例 header file在/usr/include/apr-0目錄下 lib在/usr/lib/libapr-0.a (依國際慣例-l要填淺藍的部分lib(.*).a) 為了避免出現極為可怕的#include 所以俺決定偷懶一下,寫了一個簡單的makefile qrtt1@ubuntu:~/test/apr$ cat makefile CFLAG = -I /usr/include/apr-0 LIB = -lapr-0 CC = g++ test: $(CC) $(CFLAG) $(LIB) test.c ============================================================ 謎樣的分隔線 = #include <apr.h> #include <apr_general.h> #include <stdio.h> #include <assert.h> #include <apr_pools.h> apr_status_t rect; int main () { rect = apr_initialize (); if (rect != APR_SUCCESS) { assert (0); return -1; } /* create memory pool. */ // 宣告一下pool用的type // apr的type都是以_t為suffix // 開頭是apr_這是傳統的c name space慣例 apr_pool_t *mem; // 配置記憶體"池", 第二個參數是parent :) // 因為apr的設計, pool是有階層性的,所以只要祖先有人被回起來了 // 下面的小人、小小人都會被收起來,這裡填NULL是因為沒有parent rect = apr_pool_create (&mem, NULL); if (rect != APR_SUCCESS) { assert (0); return -1; } char *buf; // 跟pool要記憶體 buf = (char *) apr_palloc (mem, 1024); // 試看看會不會segment fault for (int i = 0; i < 1024; i++) { buf[i] = i + 3; printf ("%d ", (int) buf[i]); } // 用完了,丟棄他、催毀他 :) apr_pool_destroy (mem); // 結束時要跟apr講一聲 拜 apr_terminate (); return 0; } ============================================================ 謎樣的分隔線 = btw. 看教學文件講,pool預設大小是8K,並設pool的設計不是用來大量的存取的 所以您如果有"一秒鐘幾十萬上下"的大事業可能還是用mmap比較好呦 REFERENCE 1. APR project http://apr.apache.org/ 2. APR api doc :: Memory Pool Functions http://apr.apache.org/docs/apr/group__apr__pools.html :: MMAP (Memory Map) Routines http://apr.apache.org/docs/apr/group__apr__mmap.html 3. tutorials :: Programming with Memory Pools (for svn hacker) http://svnbook.red-bean.com/en/1.1/ch08s05.html :: libapr tutorial - memory mapping http://dev.ariel-networks.com/apr/apr-tutorial/html/apr-tutorial-11.html --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.59.94.3
1F:推 dozer:什麼樣的應用會需要這種東西呀 11/16 11:52
2F:推 andytzeng:個人認為,需要頻繁的 memory dynamic 動作時非常有用 12/27 02:04







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP