0
type Point struct {
     x, y int
}

var arr [4]Point

配列はメモリ内でどのように配置されますか?

実際のオブジェクトは並べて配置されますか

[Point[x][y]][Point[x][y]][Point[x][y]][Point[x][y]]

それとも、Java のように別の場所にオブジェクトが格納されたポインターの配列になりますか?

[&Point0][&Point1][&Point2][&Point3]

ヒープのどこかに:

...[Point0[x][y]] ... [Point1[x][y]] ....  [Point3[x][y]] ... [Point2[x][y]]

また、make()メモリ内でスライスをどのようにレイアウトしますか?

make([]Point, 10)
4

1 に答える 1

3

最初の例のように、 4 Points はメモリ内で連続します。それらをポインターにしたい場合は、が必要[4]*Pointです。

のスライスはPoint、バッキング配列を使用する (指す) スライスを作成します。ここでも、Points は横に並んでいます (そして、[]*PointへのポインターのスライスになりますPoint)。

Go データ構造のメモリ レイアウトの詳しい説明については、http://research.swtch.com/godataを参照してください。

于 2015-11-11T20:19:19.677 に答える