Talloc内存池使用教程——(4)使用析构函数
来源:互联网 发布:mac怎样建立文件夹 编辑:程序博客网 时间:2024/06/06 19:55
Talloc内存池使用教程——(4)使用析构函数
使用析构函数
析构函数是面向对象编程的世界中广为人知的方法。一个析构函数是一个对象在销毁时自动执行的方法。它通常用来释放对象从系统中申请的资源(比如:关闭文件描述符,断开数据库连接,释放内存)。
使用talloc,即便我们在C语言中也能够受益于析构函数的好处。我们可以很容易的为一个talloc context附加上我们自己的析构函数。当context被释放时,析构函数将会自动运行。
使用talloc_set_destructor()来为talloc context附加或删除析构函数。
示例
想象我们有一个动态创建的链表。当我们释放其中的一个元素前,我们需要先确认它已经从链表中被移除了。一般来说,这需要两个先后完成的动作:将其从链表中移除,然后释放内存。使用talloc,我们可以通过设置元素的析构函数一次完成这件事,析构函数中将元素从链表中移除,talloc_free()将会完成余下的工作。
析构函数将类似这样:
int list_remove(void *ctx){ struct list_el *el = NULL; el = talloc_get_type_abort(ctx, struct list_el); /* remove element from the list */}
GCC3及更新版本可以在编译时检查类型。因此如果我们使用这样的编译器,我们可以使用更高级的析构函数:
int list_remove(struct list_el *el){ /* remove element from the list */}
现在我们将向元素设置析构函数。我们可以直接在插入函数中完成这件事情:
struct list_el* list_insert(TALLOC_CTX *mem_ctx, struct list_el *where, void *ptr){ struct list_el *el = talloc(mem_ctx, struct list_el); el->data = ptr; /* insert into list */ talloc_set_destructor(el, list_remove); return el;}
由于talloc是一个有层级的内存分配器,我们可以进一步释放内存:
struct list_el* list_insert_free(TALLOC_CTX *mem_ctx, struct list_el *where, void *ptr){ struct list_el *el = NULL; el = list_insert(mem_ctx, where, ptr); talloc_steal(el, ptr); return el;}
0 0
- Talloc内存池使用教程——(4)使用析构函数
- Talloc内存池使用教程——(5)内存池
- Talloc内存池使用教程——(1)什么是talloc context
- Talloc内存池使用教程——(2)过继一个talloc context
- Talloc内存池使用教程——目录
- Talloc内存池使用教程——(3)动态类型系统
- Talloc
- NESASM教程——第七天——使用内存
- 跨函数使用内存
- 跨函数使用内存
- 跨函数使用内存
- flex教程:内存使用机巧
- 图像处理函数详解——strel使用教程
- 内存分配——realloc()函数的使用
- 内存分配——realloc()函数的使用
- 内存分配——realloc()函数的使用
- 32位Windows7系统使用4G内存破解教程
- 32位Windows7系统使用4G内存破解教程
- 08 Microservices
- Hadoop的基本使用(2)——通过代码操作HDFS
- pdfmake运用笔记
- linux 增加用户(default)并修改密码
- ANR分析
- Talloc内存池使用教程——(4)使用析构函数
- JavaSE_网络编程_URL类
- php __FILE__ __DIR__魔术常量的使用【PHP进阶教程】
- NanoPi2- SD使用
- 第一章—无线传感网的技术概述
- 如何搭建个人网站(一)
- HDU 5072 coprime (同色三角形 + 容斥)
- Win 10解决 你需要来自system的权限问题
- 使用 Jmeter 做 Web 接口测试