了解数组和切片的内存布局

问题描述 投票:0回答:1

在64位OS机器上,

对于下面的代码:

println("Simple Array:")
var arrayint = [...]int{1, 2, 3, 4} //assign
fmt.Println(arrayint)

println("Simple Slice:")
var sliceint []int
sliceint = arrayint[:] //assign
fmt.Println(sliceint)

下面是内存表示形式:

enter image description here


对于下面的代码:

println("Array of arrays:")
var arrayofarrays [3][len(arrayint)]int
for i := range arrayofarrays { //assign
    arrayofarrays[i] = arrayint
}
fmt.Println(arrayofarrays)

println("Array of slices:")
var arrayofslice [len(arrayofarrays)][]int
for i := range arrayofarrays { // assign
    arrayofslice[i] = arrayofarrays[i][:]
}
fmt.Println(arrayofslice)

println("Slice of arrays:")
var sliceofarray [][len(arrayint)]int
sliceofarray = arrayofarrays[:]
fmt.Println(sliceofarray)

编辑:下面是内存表示形式:

enter image description here


对于下面的代码:

var sliceofslices [][]int

下面是内存表示形式:

enter image description here


对于下面的行:

sliceofslices = arrayofslice[:]

sliceofslices的内存表示是什么?使用前需要了解...

arrays go slice
1个回答
1
投票

arrayofslice是切片的数组,并且由于切片的大小为24个字节,因此arrayofslice的大小为n * 24,其中n是元素计数。 sliceofslices是具有后备数组arrayofslice的切片。

© www.soinside.com 2019 - 2024. All rights reserved.