GLib 中的 GRefString 实现是啥?

Posted

技术标签:

【中文标题】GLib 中的 GRefString 实现是啥?【英文标题】:What is GRefString implementation in GLib?GLib 中的 GRefString 实现是什么? 【发布时间】:2021-01-23 09:16:54 【问题描述】:

我想知道引用计数存储在哪里?由于类型定义为:

typedef char GRefString;

所有的g_ref_string*…() 函数都只返回gchar * 而不是一个可以保存引用计数的结构。 sds 库的技巧是在 char * 指向的内存之前保存元数据头结构吗?恐怕这种实施在某些时候会适得其反,对吗?即:使用这种带有前置头的字符串时会出现什么问题?

【问题讨论】:

回答你的问题:如果sds 你的意思是@antirez 的Simple Dynamic Strings,那么使用的技巧是一样的。当您以错误的方式使用指针时,可能出现的问题是您通常会遇到的问题,不多也不少。 【参考方案1】:

引用计数数据存储在字符串之前。

按照源代码,您将到达g_rc_box_alloc_full(),其中包含以下相关行:

real_size = private_size + block_size;

block_size 是您要在堆中分配的内容(在GRefString 的情况下,字符串的长度加1),private_sizesizeof(GArcBox),即包含引用计数数据的结构。

【讨论】:

以上是关于GLib 中的 GRefString 实现是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 glib 处理哈希表中的冲突

glib实践篇:接口定义与实现

这些 F 分数是啥意思?使用 SelectKBest 功能

Glib:DBUS 属性中的 NULL

未定义符号:glib 中的 g_task_set_name

是否有从 glib 中的线程池加入线程的功能?