Как работает runtime.KeepAlive и зачем нужен?

Senior
42 просмотров
AFK Offer AI

KeepAlive(x) гарантирует что x не будет собран GC до этой точки в коде. Нужен когда передаёшь указатель в C через cgo или syscall — GC может собрать объект пока C код его использует. KeepAlive — это no-op в рантайме, но compiler marker. Без него финализер может сработать до завершения cgo вызова.

Следующий вопрос

Что такое go:nosplit?