持久性内存编程——内存分配使用举例

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

前面有了两篇讲解内存分配的博文:

持久性内存编程——事务性动态内存分配: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 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值