GValue инициализация / необходимость завершения - PullRequest
0 голосов
/ 26 сентября 2018

Когда мне следует позвонить g_value_init / g_value_reset?

В настоящее время я использую g_value_init и g_value_reset во всех случаях, но я хочу знать, можно ли его ускорить.

Я знаю, по крайней мере, что:

  • При использовании объектов или типов в штучной упаковке определенно необходимо вызвать g_value_reset, потому что GValue мог получить ссылку или дублироваться в случаеэто GBoxed.
  • При использовании элементарных типов, таких как guint или gboolean (без какого-либо управления памятью), вызов g_value_reset теоретически не должен быть необходим, поскольку для них не должна выделяться память.Я даже прочитал реализацию, и это подтверждается.Однако я обеспокоен тем, что авторы могут внести изменение и начать выделять некоторую память (или просто выполнить некоторое отслеживание), а затем это приведет к утечке памяти.

Это все мои текущие исследования.Я хотел бы расширить его, возможно, при поддержке официальных ссылок на документацию.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Ваши нынешние мысли в основном верны.g_value_init() всегда должен использоваться для инициализации выделенного стека GValue.g_value_unset() должен использоваться всякий раз, когда GValue выходит из области видимости, для выпуска любых специфических для него данных.g_value_reset() следует использовать, если вы хотите сбросить GValue к значению по умолчанию - обратите внимание, что для некоторых типов это может означать, что оно все еще указывает на выделенную память.

g_value_unset() обычно используется гораздо большечаще чем g_value_reset().

0 голосов
/ 26 сентября 2018

Я не знаю много об этой теме, но я погуглил 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

Посмотрите, поможет ли это

...