On Mon, Jan 23, 2017 at 3:57 AM, <pierspowlesl...@gmail.com> wrote: > The doc for cgo states ... > > "Go code may pass a Go pointer to C provided the Go memory to which it > points does not contain any Go pointers. The C code must preserve this > property: it must not store any Go pointers in Go memory, even temporarily. > When passing a pointer to a field in a struct, the Go memory in question is > the memory occupied by the field, not the entire struct. When passing a > pointer to an element in an array or slice, the Go memory in question is the > entire array or the entire backing array of the slice. > > Why is this? Is it because go only keeps track of the pointers that are > direct arguments to a cgo call. So if for instance a struct containing the > only pointer to some value is passed to cgo then go loses track of that > reference and the memory pointed at will be up for garbage collection?
Basically, yes. See https://github.com/golang/proposal/blob/master/design/12416-cgo-pointers.md and https://golang.org/issue/12416. Ian -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.