0

我应该什么时候打电话g_value_init/ g_value_reset

目前,我在所有情况下都在使用g_value_initg_value_reset,但我想知道它是否可以加速。

我至少知道:

  • 当使用对象或盒装类型时,肯定需要调用g_value_reset,因为 GValue 可能已经获得了引用,或者如果它是GBoxed.
  • 当使用像guintor这样的基本类型gboolean(没有任何内存管理)时,g_value_reset理论上应该不需要调用,因为不应该为它们分配内存。我什至已经阅读了实现,它被证明是正确的。但是,我担心作者可能会引入更改并开始分配一些内存(或只是进行一些跟踪),然后会导致内存泄漏。

这就是我目前的所有研究。我想扩展它,可能得到官方文档参考的支持。提前致谢。

4

2 回答 2

2

你目前的想法大多是正确的。g_value_init()必须始终用于初始化堆栈分配的GValue. g_value_unset()必须在 aGValue超出范围时使用,以释放任何特定于类型的数据。g_value_reset()如果你想将 a 重置GValue为默认值,应该使用它——注意,对于某些类型,这可能意味着它仍然指向分配的内存。

g_value_unset()通常比 . 更频繁地使用g_value_reset()

于 2018-09-29T09:12:00.203 回答
-1

我对这个话题了解不多,但我用谷歌搜索g_value_init,发现这些 GNOME 开发人员的页面可能有用:

https://developer.gnome.org/gobject/stable/gobject-Generic-values.html#g-value-reset

https://developer.gnome.org/glib/stable/glib-Basic-Types.html#gboolean

看看有没有帮助

于 2018-09-26T18:46:59.890 回答