关于多线程堆栈分配

来源:1-13 Go 语言的内存管理与垃圾回收

Garry_27

2021-06-21 23:14:50

曹大每个线程拥有自己独立的虚拟地址空间吗(堆空间和栈空间都是吗还是只有栈空间或者其他)。如果每个个线程有自己独立的栈或堆空间的话他们的大小是固定吗还是动态收缩的。

写回答

1回答

Xargin

2021-06-22

这个应该是操作系统方面的基础,线程的地址空间是共用的。

每个线程有自己的栈(见图)。


堆是公用的(见下面的图)。在 C 语言里,栈是可以增长的,但是有个限制,可以通过 ulimit 来看到。

http://img.mukewang.com/climg/60d1a9c20981736b09700396.jpg


Go 的 goroutine 的栈是在堆区分配的,能增长,但是有限制(最大1GB),可以通过 SetMaxStack 来改,不过一般不改这个。


上面这些内容和这个图是可以对应的上的:

http://img.mukewang.com/climg/60d1a97c094c3de514821618.jpg

1

Go高级工程师实战营

慕课网与 GoCN 社区官方联手打造,定义行业Go高级人才培养标准,4个月,快速晋升为P6+/D7级高级人才。

458 学习 · 266 问题

查看课程