我什么时候应该致电g_value_init
/ g_value_reset
?
当前,我在所有情况下都使用g_value_init
和g_value_reset
,但是我想知道是否可以加快速度。
我至少知道:
g_value_reset
,因为GValue可能已经获取了引用,或者在它为GBoxed
的情况下是重复的。guint
或gboolean
之类的基本类型(无任何内存管理)时,从理论上讲,g_value_reset
调用是不必要的,因为不应为它们分配内存。我什至已经阅读了实现,事实证明它是正确的。但是,我担心作者可能会进行更改并开始分配一些内存(或只是进行一些跟踪),然后这会导致内存泄漏。这就是我目前所有的研究。我想扩大它,可能会得到官方文档参考的支持。预先感谢。
答案 0 :(得分:1)
您当前的想法大部分是正确的。 g_value_init()
必须始终用于初始化堆栈分配的GValue
。每当g_value_unset()
超出范围时,都必须使用GValue
来为其释放任何特定于类型的数据。如果要将g_value_reset()
重置为默认值,则应使用GValue
。请注意,对于某些类型,这可能意味着它仍指向分配的内存。
g_value_unset()
通常比g_value_reset()
更频繁地使用。
答案 1 :(得分:-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
看看是否有帮助