关于多线程堆栈分配
来源:1-13 Go 语言的内存管理与垃圾回收
Garry_27
2021-06-21 23:14:50
曹大每个线程拥有自己独立的虚拟地址空间吗(堆空间和栈空间都是吗还是只有栈空间或者其他)。如果每个个线程有自己独立的栈或堆空间的话他们的大小是固定吗还是动态收缩的。
1回答
Xargin
2021-06-22
这个应该是操作系统方面的基础,线程的地址空间是共用的。
每个线程有自己的栈(见图)。
堆是公用的(见下面的图)。在 C 语言里,栈是可以增长的,但是有个限制,可以通过 ulimit 来看到。
Go 的 goroutine 的栈是在堆区分配的,能增长,但是有限制(最大1GB),可以通过 SetMaxStack 来改,不过一般不改这个。
上面这些内容和这个图是可以对应的上的:
相似问题