An introduction to pmemobj (part 3) - types

參考鏈接:https://pmem.io/2015/06/16/types.html

API函數

POBJ_ROOT() //代替 pmemobj_root() 函數

D_RW() //寫入(根節點)

D_RO() //讀取(根節點)

TX_MEMCPY() //代替memcpy 對事務進行操作

爲了提供類型安全性,在持續性內存編程前需要明確的 layout 聲明,以字符串存儲爲例的 layout 聲明:

POBJ_LAYOUT_BEGIN(string_store);
POBJ_LAYOUT_ROOT(string_store, struct my_root);
POBJ_LAYOUT_END(string_store);

#define	MAX_BUF_LEN 10
struct my_root {
	char buf[MAX_BUF_LEN];
};

其中的 string_store 只是一個命名,如果要創建或者打開特定的內存池:

pmemobj_create(path, POBJ_LAYOUT_NAME(string_store), PMEMOBJ_MIN_POOL, 0666);
...
pmemobj_open(path, POBJ_LAYOUT_NAME(string_store));

之前使用 PMEMoids 作爲持續性內存指針,但是這相當於直接通過一個地址去訪問數據,可能會出現不同類型的指針之間相互賦值這種情況,但是編譯器不會認爲是錯的,那麼這樣我們引入 TOID 類型來代替之前的持續性指針 PMEMoids。

 

TOID 轉換爲 PMEM :

TOID(struct foo) data;
pmemobj_direct(data.oid);

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章