Looks the answer is not. But any one can confirm this?
package main
import "fmt"
import "unsafe"
import "runtime"
var ha0, ha1, ha2 uint64
func f() **int {
for false{} // avoid f being inlined.
s := make([]byte, unsafe.Sizeof((*int)(nil))) // enough memory to hold
a pointer
pp := (**int)(unsafe.Pointer(&s[0]))
var ms0 runtime.MemStats
runtime.GC()
runtime.ReadMemStats(&ms0)
ha0 = ms0.HeapAlloc
x := 123
*pp = &x
var ms1 runtime.MemStats
runtime.GC()
runtime.ReadMemStats(&ms1)
ha1 = ms1.HeapAlloc
return pp
}
var a []int
func main() {
p := f()
var ms runtime.MemStats
runtime.GC()
runtime.ReadMemStats(&ms)
ha2 = ms.HeapAlloc
// Is the memory allocated for x in f
// guaranteed to be reachable at this moment?
fmt.Println(ha0, ha1, ha2) // 67760 67776 67760
a = make([]int, 10)
fmt.Println(**p, a)
}
On Saturday, May 26, 2018 at 10:12:05 AM UTC-4, T L wrote:
>
>
>
> package main
>
> import "fmt"
> import "unsafe"
> import "runtime"
>
> func f() **int {
> for false{} // avoid f being inlined.
>
> s := make([]byte, unsafe.Sizeof((*int)(nil))) // enough memory to
> hold a pointer
> pp := (**int)(unsafe.Pointer(&s[0]))
> x := 123
> *pp = &x
> return pp
> }
>
> var a []int
>
> func main() {
> p := f()
>
> runtime.GC()
>
> // Is the memory allocated for x in f
> // guaranteed to be reachable at this moment?
>
> a = make([]int, 10)
> fmt.Println(**p, a)
> }
>
>
>
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.