參考鏈接: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);