Golang升级到1.7后,之前正确的函数出现错误,分析原因及解决办法

GoWKH ·
这样还是不够的,uintptr不是指针是整数,GC不会作为引用跟踪它,所以单单保证不被回收还不够,还得保证不被移动。现在的GC实现不会移动堆上的对象(栈上的会),所以不会出问题。以后如果GC会移动堆上对象了,单单用runtime.KeepAlive一样可能出问题。 简单的运算,go的性能和C差不多的了([Go vs C gcc (64-bit Ubuntu quad core](http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=go&lang2=gcc)),和C比主要差在bounds check,C是没有的。不过现在go 1.7有bounds check elimination([tapirgames.com/blog/golang-1.7-bce](http://www.tapirgames.com/blog/golang-1.7-bce)),调整下代码触发编译器的这个优化就行了。 reflect是安全的,只要写得对,编译器会保证兼容。unsafe就不保证,所以能不用就不用吧,现在的性能对比可能没有8倍那么多了。
#1