Talloc内存池使用教程——(2)过继一个talloc context
来源:互联网 发布:mac无法解压zip 编辑:程序博客网 时间:2024/06/05 08:36
Talloc内存池使用教程——(2)过继一个talloc context
过继一个talloc context
Talloc拥有变更一个context的父节点的能力。这个操作通常被称为过继(译者注:原文为stealing,为更加易懂翻译为过继),它是最重要的talloc context操作之一。
当我们需要让一个context的生命周期比它的父节点更长时,过继context是一个必要的操作。有许多场景下会用到此功能,比如将数据库的搜索结果过继给内存中的缓存,或者将父节点从一个通用结构更改为一个具体的结构,反之亦然。最常见的场景(至少对Samba来说),是将数据从某一个函数内专用的context过继给输出context,作为输出函数的参数。
struct foo { char *a1; char *a2; char *a3;};struct bar { char *wurst; struct foo *foo;};struct foo *foo = talloc_zero(ctx, struct foo);foo->a1 = talloc_strdup(foo, "a1");foo->a2 = talloc_strdup(foo, "a2");foo->a3 = talloc_strdup(foo, "a3");struct bar *bar = talloc_zero(NULL, struct bar);/* change parent of foo from ctx to bar */bar->foo = talloc_steal(bar, foo);/* or do the same but assign foo = NULL */bar->foo = talloc_move(bar, &foo);
talloc_move()函数与talloc_steal函数类似,不同点是它进一步将源指针设为了NULL。
一般来说,源指针自身是不会被改变的(talloc只改变了它的元数据中的父节点)。但一个常见的用法是将函数调用结果赋值给一个另外的变量,这样的话通过原来的指针访问变量应当被避免,除非必须如此。在这种情况下推荐使用talloc_move()来过继context。由于它将源指针设为NULL,这样避免了指针被意外释放,也避免了旧变量在父节点被更改的情况下被错误的使用。
0 0
- Talloc内存池使用教程——(2)过继一个talloc context
- Talloc内存池使用教程——(1)什么是talloc context
- Talloc内存池使用教程——(5)内存池
- Talloc内存池使用教程——目录
- Talloc内存池使用教程——(4)使用析构函数
- Talloc内存池使用教程——(3)动态类型系统
- Talloc
- No package 'talloc' found
- (Irrlicht官方文档)class irr::core::array< T, TAlloc >
- no talloc stackframe at ../source3/param/loadparm.c
- no talloc stackframe at ../source3/param/loadparm.c
- Why you should use talloc for your next project
- no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory
- 错误-Ubuntu-no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory
- no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory
- Context——Context的使用(2)
- Context——Context的使用
- Android 内存泄漏——context泄漏
- docker 扫盲
- linux命令:gunzip
- NYOJ-19 擅长排列的小明
- 2016-11-24
- 最短路径(3)--poj2253(Dijkstra变形题)
- Talloc内存池使用教程——(2)过继一个talloc context
- php源码之路第七章第二节 (语法的实现之语法解析)
- Spark2.0.1 on yarn with hue 集群安装部署(七)livy安装测试
- cpio命令文件备份和恢复
- 直接插入排序
- Java中随机生成字符串
- android 的一些快捷键
- MySQL + KeepAlived 实现 双主复制热备 及HA方案
- thinkphp调用二级栏目(二级分类) 函数+模板 完整代码