前面有了两篇讲解内存分配的博文:
持久性内存编程——事务性动态内存分配:https://blog.youkuaiyun.com/SweeNeil/article/details/90547136
持久性内存编程——原子分配动态内存:https://blog.youkuaiyun.com/SweeNeil/article/details/90444432
其实写得都有点简单,没有一个比较简单具体的案例,下面就把具体的内存分配的简单案例整理出来。
目录
一、事务性动态内存分配
rect_calc.c:
#include <stdio.h>
#include <string.h>
#include <libpmemobj.h>
POBJ_LAYOUT_BEGIN(rect_calc);
POBJ_LAYOUT_ROOT(rect_calc, struct my_root);
POBJ_LAYOUT_TOID(rect_calc, struct rectangle);
POBJ_LAYOUT_END(rect_calc);
struct rectangle {
int a;
int b;
};
struct my_root {
TOID(struct rectangle) rect;
};
int area_calc(const TOID(struct rectangle) rect) {
return D_RO(rect)->a * D_RO(rect)->b;
}
int main(int argc, char *argv[])
{
if (argc != 2) {
printf("usage: %s file-name\n", argv[0]);
return 1;
}
PMEMobjpool *pop = pmemobj_create(argv[1],POBJ_LAYOUT_NAME(rect_calc), PMEMOBJ_MIN_POOL, 0666);
if (pop == NULL) {
perror("pmemobj_create");
return 1;
}
TOID(struct my_root) root = POBJ_ROOT(pop, struct my_root);
TX_BEGIN(pop) {
TX_ADD(root); /* we are going
持久性内存编程实践:内存分配案例解析

本文提供持久性内存编程中事务性和原子性动态内存分配的实例,包括`rect_calc.c`和`alloc.c`的代码展示及编译运行过程。作者指出在编程时对layout的声明位置要求较高,不正确放置会导致编译错误。通过测试,展示了两种不同的内存分配方式及其可能遇到的问题。
最低0.47元/天 解锁文章
5万+

被折叠的 条评论
为什么被折叠?



