Понимание расположения памяти для массива и среза - PullRequest
0 голосов
/ 11 апреля 2020

На машине с 64-битной ОС,

Для кода ниже:

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? Необходимо понять, прежде чем использовать его ...

1 Ответ

1 голос
/ 11 апреля 2020

arrayofslice - это массив слайсов, а поскольку размер слайса составляет 24 байта, размер arrayofslice равен n * 24, где n - количество элементов. sliceofslices - это фрагмент с массивом подложки arrayofslice.

...