Нужно ли освобождать структуры, созданные с помощью Cgo?

Я создаю структуры C в своем коде Go, например:

var data C.MyStruct_t

Должен ли я в какой-то момент освобождать их вручную, как при использовании CString? С CString я часто делаю что-то вроде:

ctitle := C.String(title)
defer C.free(unsafe.Pointer(&ctitle))
C.my_func(&ctitle)

person anselm    schedule 23.01.2017    source источник


Ответы (1)


Нет. Вы вызываете free только для того, что было выделено с помощью функций C *alloc. Функции C.CString и C.CBytes задокументированы как внутренние и требуют использования C.free.

В этом случае, хотя data имеет тип C.MyStruct_t, он выделен в Go и поэтому будет обрабатываться сборщиком мусора Go.

person JimB    schedule 23.01.2017