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