C GLib中的GRefString实现是什么?

C GLib中的GRefString实现是什么?,c,string,refcounting,ref-struct,C,String,Refcounting,Ref Struct,我想知道参考计数存储在哪里?由于类型定义为: typedef char GRefString; 所有的g_ref_string*…()函数都只返回gchar*,而不是一个可以保存引用计数的结构。sds库的诀窍是在char*指向的内存之前保存元数据头结构吗?我担心这样的实施在某个时候会适得其反,对吗?即:当使用这种预装表头的字符串时会出现什么问题?参考计数数据存储在字符串之前 在源代码之后,您将在以下相关行中结束: real_size = private_size + block_size;

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

typedef char GRefString;

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

参考计数数据存储在字符串之前

在源代码之后,您将在以下相关行中结束:

real_size = private_size + block_size;

block\u size
是要在堆中分配的内容(在
GRefString
情况下,字符串的长度加1),
private\u size
sizeof(GArcBox)
,即包含refcounting数据的结构。

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

在源代码之后,您将在以下相关行中结束:

real_size = private_size + block_size;

block\u size
是要在堆中分配的值(在
GRefString
的情况下,字符串的长度加1),而
private\u size
sizeof(GArcBox)
,例如,包含refcounting数据的结构。

回答您的问题:如果@antirez使用
sds
您的意思是
简单动态字符串
。当您以错误的方式使用指针时,可能出现的问题是您经常遇到的问题,不多也不少。回答您的问题:if by
sds
您的意思是@antirez的
简单动态字符串
,而不是yes:使用的技巧是相同的。当您以错误的方式使用指针时,可能出现的问题是您通常会遇到的问题,不多也不少。