我正在搜索切片的内存分配,无论是编译时是静态还是动态动态。由于切片是指向后面数组的指针,我已经研究了动态内存分配,指针是至关重要的。那么切片的分配是什么以及地图如何。
答案 0 :(得分:2)
type slice struct {
array unsafe.Pointer
len int
cap int
}
切片描述符是struct
。 make([]type, len, cap)
返回一个slice
描述符,其中包含指向具有给定type
,len
(长度)和cap
(容量)的基础数组的指针。切片描述符和/或其底层数组在堆栈和/或堆上分配。
type string struct {
array unsafe.Pointer
len int
}
字符串描述符是struct
,其指针指向长度为byte
的基础len
数组。由于strings
是不可变的,因此容量是多余的;它总是等于长度。来自文字或转换的字符串描述符和/或其底层数组在堆栈和/或堆上分配。
将字符串视为byte
切片的特殊形式。例如,切片表达式适用于两者。
The Go Programming Language Specification
切片表达式从字符串数组构造子字符串或切片, 指向数组或切片的指针。有两种变体:一种简单的形式 指定低限和高限,以及指定a的完整形式 受到能力的限制。