为什么基本 GType 类型的 instance_size 为 0?

问题描述

在 GLib 的 GType 子系统中注册了大量基本类型(GLib 的源文件 gvaluetypes.c 如下):

/* --- type initialization --- */
void
_g_value_types_init (void)
{
  GTypeInfo info = {
    0,/* class_size */
    NULL,/* base_init */
    NULL,/* base_destroy */
    NULL,/* class_init */
    NULL,/* class_destroy */
    NULL,/* class_data */
    0,/* instance_size */
    0,/* n_preallocs */
    NULL,/* instance_init */
    NULL,/* value_table */
  };
  const GTypeFundamentalInfo finfo = { G_TYPE_FLAG_DERIVABLE,};
  GType type G_GNUC_UNUSED  /* when compiling with G_DISABLE_ASSERT */;
  
  /* G_TYPE_CHAR / G_TYPE_UCHAR
   */
  {
    static const GTypeValueTable value_table = {
      value_init_long0,/* value_init */
      NULL,/* value_free */
      value_copy_long0,/* value_copy */
      NULL,/* value_peek_pointer */
      "i",/* collect_format */
      value_collect_int,/* collect_value */
      "p",/* lcopy_format */
      value_lcopy_char,/* lcopy_value */
    };
    info.value_table = &value_table;
    type = g_type_register_fundamental (G_TYPE_CHAR,g_intern_static_string ("gchar"),&info,&finfo,0);
    g_assert (type == G_TYPE_CHAR);
    type = g_type_register_fundamental (G_TYPE_UCHAR,g_intern_static_string ("guchar"),0);
    g_assert (type == G_TYPE_UCHAR);
  }
  …
  …
  …

我想知道为什么没有使用 instance_size 结构的 info?基本类型没有/使用任何“实例大小”吗?我打算使用这个子系统来注册一些类型, 包括基本的,我想知道我是否应该指定, 例如:8 代表 instance_size 代表 gint64-等效类型?

一般来说,指定基本类型的真实大小有什么问题?应该不会有什么危害吧?如果是,那么为什么 GLib 不使用此功能?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...