GLib 中的 GRefString 实现是什么?

问题描述

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

typedef char GRefString;

并且所有 g_ref_string*…() 函数都返回简单的 gchar * 而不是一个可以保存引用计数的结构。在 sds 指向的内存之前保存元数据头结构是 char * 库的技巧吗?我担心这样的实施在某些时候会适得其反,对吗?即:使用这种预先配备了头文件的字符串会出现什么问题?

解决方法

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

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

real_size = private_size + block_size;

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