Go 内存四区

内存四区

内存四区概念:

A.数据类型本质:

​ 固定内存大小的别名

B. 数据类型的作用:

​ 编译器预算对象(变量)分配的内存空间大小。

image-20211024175057710

C.内存4区

image-20211024175153459

流程说明

1、操作系统把物理硬盘代码load到内存

2、操作系统把c代码分成四个区

3、操作系统找到main函数入口执行

栈区(Stack):

​ 空间较小,要求数据读写性能高,数据存放时间较短暂。由编译器自动分配和释放,存放函数的参数值、函数的调用流程方法地址、局部变量等(局部变量如果产生逃逸现象,可能会挂在在堆区)

堆区(heap):

​ 空间充裕,数据存放时间较久。一般由开发者分配及释放(但是Golang中会根据变量的逃逸现象来选择是否分配到栈上或堆上),启动Golang的GC由GC清除机制自动回收。

全局区-静态全局变量区:

​ 全局变量的开辟是在程序在main之前就已经放在内存中。而且对外完全可见。即作用域在全部代码中,任何同包代码均可随时使用,在变量会搞混淆,而且在局部函数中如果同名称变量使用:=赋值会出现编译错误。

​ 全局变量最终在进程退出时,由操作系统回收。

常量区也归属于全局区,常量为存放数值字面值单位,即不可修改。或者说的有的常量是直接挂钩字面值的。

比如:

const cl = 10

cl是字面量10的对等符号。

所以在golang中,常量是无法取出地址的,因为字面量符号并没有地址而言。

###


   转载规则


《Go 内存四区》 朱林刚 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
GO基本数据类型 GO基本数据类型
GO基本数据类型GO基本数据类型整型//按长度分 int8 int16 int32 int64 //按有无符号分 uint8 uint16 uint32 uint64 //提供了平台自动匹配长度的int类型和uint类型 int uint
2021-11-18
下一篇 
Go接口 interface Go接口 interface
Go接口 interfaceGo接口 interface声明type People interface { Speak(string) string //method(parama)(return param) } //实现接口
2021-11-18
  目录