怎样理解 Go的协程栈位于Go的堆内存上,Go的堆内存位于操作系统的虚拟内存上这句话?

来源:9-7 什么样对象需要垃圾回收?

Eldin_Zhou

2022-09-14

Go的协程栈位于Go的堆内存上,Go的堆内存位于操作系统的虚拟内存上。这是您课上所说的内容。
但是我完全不能理解什么叫做协程栈位于Go的堆内存上。那Go还有栈内存吗?Go所有的内存都在堆内存上了?
Go的内存模型还遵循进程的内存模型吗(如下图所示的内存模型)这里Go还有栈内存被分配吗?(或者说我没有理解Go的内存管理和操作系统的内存管理之间的关系)

图片描述

写回答

1回答

Moody

2022-09-15

我的理解是Go的协程栈,并不使用操作系统规定的栈空间,实际使用的是堆空间。因为操作系统的栈空间是以线程为单位的,Go的不同的协程可能会跑在同一个线程上,所以不能使用操作系统的栈空间。

0
0

深入Go底层原理,重写Redis中间件实战

深入Go语言原理+Go重写Redis

474 学习 · 172 问题

查看课程