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

GoWKH · 2017-02-07 03:35:40

这样还是不够的,uintptr不是指针是整数,GC不会作为引用跟踪它,所以单单保证不被回收还不够,还得保证不被移动。现在的GC实现不会移动堆上的对象(栈上的会),所以不会出问题。以后如果GC会移动堆上对象了,单单用runtime.KeepAlive一样可能出问题。

简单的运算,go的性能和C差不多的了(Go vs C gcc (64-bit Ubuntu quad core),和C比主要差在bounds check,C是没有的。不过现在go 1.7有bounds check elimination(tapirgames.com/blog/golang-1.7-bce),调整下代码触发编译器的这个优化就行了。

reflect是安全的,只要写得对,编译器会保证兼容。unsafe就不保证,所以能不用就不用吧,现在的性能对比可能没有8倍那么多了。

#1