危険な改善、パフォーマンスの使用

この方法が推奨されて行くメモリコピー操作が発生しますが、利点は、損失が生じ、安全でパフォーマンスになり、この損失に対処する一般的なビジネスはごくわずかです。ただし、パフォーマンスを最適化したいときコピーが、しばしばそうであるならば、unsafe.Pointerを導入する必要があります。

func main()  {
    var s = []byte("我永远喜欢藤原千花.jpg")
    Res := *(*string)(unsafe.Pointer(&s))
    fmt.Println(Res)
}

効率がより速く変換起こるのタイプのメモリコピーよりも、しかし犠牲に危険な慣行である、基礎となるデータを、公開されますので、文字列は、unsafe.Pointerメモリコピー処理が発生しないことにより、偽造します。

スライスは、この方法と文字列の変換により、我々は彼らの基本的な構造SliceHeaderとStringHeaderを見ることができる理由については:

type SliceHeader struct {
    Data uintptr
    Len  int
    Cap  int
  }
type StringHeader struct {
    Data uintptr
    Len  int
  }
两种类型只差了一个字段Cap(容量),前面剩余的字段都是内存对齐的,所以可以直接转换




おすすめ

転載: www.cnblogs.com/hualou/p/12069768.html