我想知道引用计数存储在哪里?由于类型定义为:
typedef char GRefString;
并且所有g_ref_string*…()
函数都简单地返回gchar *
,而不是一个可以保存引用计数的结构。在指向内存sds
之前保存元数据头结构是库的技巧吗?char *
恐怕这种实施在某些时候会适得其反,对吗?即:使用这种带有前置头的字符串时会出现什么问题?
我想知道引用计数存储在哪里?由于类型定义为:
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_size
is sizeof(GArcBox)
,即包含引用数据的结构。