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);

 

 

 

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