【问题标题】:How does go layout arrays of structs in memory?go 如何在内存中布局结构数组?
【发布时间】:2016-02-13 01:00:42
【问题描述】:
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)

【问题讨论】:

    标签: arrays memory struct go memory-layout


    【解决方案1】:

    4 个Points 在内存中是连续的,就像在您的第一个示例中一样。如果你想让它们成为指针,那么你需要[4]*Point

    Point 的切片创建一个使用(指向)后备数组的切片,其中 Points 将是并排的([]*Point 将是指向 @ 的指针切片987654327@).

    请参阅 http://research.swtch.com/godata 以获得对 Go 数据结构的内存布局的良好解释。

    【讨论】:

    • 谢谢!想要确保 Go 不会像 java 那样引用所有内容。关于您的链接,我以前见过它,但它没有谈论结构数组。
    猜你喜欢
    • 2015-06-30
    • 2015-01-12
    • 2012-04-04
    • 1970-01-01
    • 2011-02-14
    • 2014-10-28
    • 2012-11-25
    • 2018-08-30
    相关资源
    最近更新 更多