Go数组的内存管理

数组内存管理

image-20210314173847540

开辟内存 默认零值

数组,定长且元素类型一致的数据集合

必备知识点:

  • 数组的内存是连续的
    • 也就是声明的元素是连续挨着存放的,内存之间的间隔和元素的类型有关,就比如元素为int8类型,那么他们之间就相差一个字节
  • 数组的内存地址实际上就是数组第一个元素的内存地址
    • 也就是第0个元素的内存地址,变量的内存地址指向的就是第0个元素的内存地址
  • 每个字符串的内部存储分为两部分len+str

image-20210314182324806

小栗子

int8类型的
package main

import "fmt"

func main() {
   nums := [3]int8{11,22,33}
   fmt.Println(nums)
   //%s %d %f 这些占位符分别表示字符串,整形,浮点型
   //%p 是用来表示内存地址的 \n换行
   fmt.Printf("数组的内存地址:%p \n",&nums)
   fmt.Printf("数组第一个元素的内存地址:%p \n",&nums[0])
   fmt.Printf("数组第二个元素的内存地址:%p \n",&nums[1])
   fmt.Printf("数组第三个元素的内存地址:%p \n",&nums[2])
   fmt.Printf("数组第二个元素:%d \n",nums[1])
}
>>>输出
[11 22 33]
数组的内存地址:0xc0000a2058 
数组第一个元素的内存地址:0xc0000a2058 // 和数组内存地址相等
数组第二个元素的内存地址:0xc0000a2059 // 相差一个字节
数组第三个元素的内存地址:0xc0000a205a 
数组第二个元素:22 
int32类型的
package main

import "fmt"

func main() {
   nums := [3]int32{11,22,33}
   fmt.Println(nums)
   //%s %d %f 这些占位符分别表示字符串,整形,浮点型
   //%p 是用来表示内存地址的 \n换行
   fmt.Printf("数组的内存地址:%p \n",&nums)
   fmt.Printf("数组第一个元素的内存地址:%p \n",&nums[0])
   fmt.Printf("数组第二个元素的内存地址:%p \n",&nums[1])
   fmt.Printf("数组第三个元素的内存地址:%p \n",&nums[2])
   fmt.Printf("数组第二个元素:%d \n",nums[1])
}
>>>输出
[11 22 33]
数组的内存地址:0xc00000a0b0 
数组第一个元素的内存地址:0xc00000a0b0 
数组第二个元素的内存地址:0xc00000a0b4 //相差四个字节
数组第三个元素的内存地址:0xc00000a0b8 
数组第二个元素:22 
字符类型

在数组里面存字符串,存储的并不是字符串的内容,而是存的字符串的长度(8bit)指针(8bit)指针指向另外一个内存,这个内存里存放真正的内容,每一个字符串

package main

import "fmt"

func main() {
	names := [3]string{"孙悟空", "八戒", "沙和尚啊"}
	fmt.Println(names)
	fmt.Printf("数组的内存地址:%p \n", &names)
	fmt.Printf("数组第一个元素的内存地址:%p \n", &names[0])
	fmt.Printf("数组第二个元素的内存地址:%p \n", &names[1])
	fmt.Printf("数组第三个元素的内存地址:%p \n", &names[2])
}
>>>输出
[孙悟空 八戒 沙和尚啊]
数组的内存地址:0xc00006c330 
数组第一个元素的内存地址:0xc00006c330 // 看起来虽然差了十位,但是由于是展示是以16进制展示 0123456789abcdef 其实相差的是16个bit位
数组第二个元素的内存地址:0xc00006c340 
数组第三个元素的内存地址:0xc00006c350 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值