什么是 GLib 中的 GRefString 实现?
What is GRefString implementation in GLib?
我想知道引用计数存储在哪里?由于类型定义为:
typedef char GRefString;
并且所有 g_ref_string*…()
函数都只返回 gchar *
而不是可以保存引用计数的结构。是 sds
库的把戏,在 char *
指向的内存之前保存元数据 header 结构吗?恐怕这样的实施有时会适得其反,对吗?即:使用这样 pre-header 配备的字符串会出现什么问题?
引用计数数据存储在字符串之前。
按照源代码,您将在 g_rc_box_alloc_full() 中找到具有以下相关行的内容:
real_size = private_size + block_size;
block_size
就是你要在堆中分配的(在GRefString
的情况下,字符串的长度加1)而private_size
就是sizeof(GArcBox)
,即包含引用计数数据的结构。
我想知道引用计数存储在哪里?由于类型定义为:
typedef char GRefString;
并且所有 g_ref_string*…()
函数都只返回 gchar *
而不是可以保存引用计数的结构。是 sds
库的把戏,在 char *
指向的内存之前保存元数据 header 结构吗?恐怕这样的实施有时会适得其反,对吗?即:使用这样 pre-header 配备的字符串会出现什么问题?
引用计数数据存储在字符串之前。
按照源代码,您将在 g_rc_box_alloc_full() 中找到具有以下相关行的内容:
real_size = private_size + block_size;
block_size
就是你要在堆中分配的(在GRefString
的情况下,字符串的长度加1)而private_size
就是sizeof(GArcBox)
,即包含引用计数数据的结构。