什么时候打电话给g_value_init/g_value_reset?
目前,我在所有情况下都使用g_value_init和g_value_reset,但我想知道是否可以加快速度。
我至少知道:
g_value_reset,因为GValue可以获得引用,或者在它是GBoxed的情况下复制。guint或gboolean (没有任何内存管理))时,理论上g_value_reset调用应该是不必要的,因为不应该分配内存。我甚至读过这个实现,事实证明它是真的。但是,我担心作者可能会引入一个更改,开始分配一些内存(或者只是进行一些跟踪),然后就会导致内存泄漏。这就是我目前的研究。我想扩大它,可能的支持正式文件参考资料。提前谢谢。
发布于 2018-09-29 09:12:00
你目前的想法大多是正确的。必须始终使用g_value_init()来初始化堆栈分配的GValue。当一个g_value_unset()超出范围时,必须使用GValue来释放它的任何特定类型的数据。如果要将一个g_value_reset()重置为默认值,则应该使用GValue --注意,对于某些类型,这可能意味着它仍然指向已分配的内存。
g_value_unset()通常比g_value_reset()更频繁地使用。
https://stackoverflow.com/questions/52523831
复制相似问题