转片存储在动态内存或静态内存中

时间:2018-04-11 09:19:10

标签: go memory-management slice

我正在搜索切片的内存分配,无论是编译时是静态还是动态动态。由于切片是指向后面数组的指针,我已经研究了动态内存分配,指针是至关重要的。那么切片的分配是什么以及地图如何。

1 个答案:

答案 0 :(得分:2)

type slice struct {
    array unsafe.Pointer
    len   int
    cap   int
}

切片描述符是structmake([]type, len, cap)返回一个slice描述符,其中包含指向具有给定typelen(长度)和cap(容量)的基础数组的指针。切片描述符和/或其底层数组在堆栈和/或堆上分配。

type string struct {
    array unsafe.Pointer
    len   int
}

字符串描述符是struct,其指针指向长度为byte的基础len数组。由于strings是不可变的,因此容量是多余的;它总是等于长度。来自文字或转换的字符串描述符和/或其底层数组在堆栈和/或堆上分配。

将字符串视为byte切片的特殊形式。例如,切片表达式适用于两者。

  

The Go Programming Language Specification

     

Slice expressions

     

切片表达式从字符串数组构造子字符串或切片,   指向数组或切片的指针。有两种变体:一种简单的形式   指定低限和高限,以及指定a的完整形式   受到能力的限制。