gpt4 book ai didi

memory-management - Go怎么没有stackoverflow

转载 作者:IT老高 更新时间:2023-10-28 13:03:04 26 4
gpt4 key购买 nike

我在此演示文稿中读到 http://golang.org/doc/ExpressivenessOfGo.pdf第 42 页:

Safe

- no stack overflows

这怎么可能?和/或 Go 如何避免这种情况?

最佳答案

这是一个称为“分段堆栈”的功能:每个 goroutine 都有自己的堆栈,allocated on the heap .

在最简单的情况下,编程语言实现对每个进程/地址空间使用一个堆栈,通常使用称为 pushpop 的特殊处理器指令(或类似的东西)进行管理) 并实现为从固定地址(通常是虚拟内存的顶部)开始的堆栈帧的动态数组。

这是(或曾经)很快,但不是特别安全。当大量代码在同一地址空间(线程)中同时执行时,它会导致麻烦。现在每个人都需要自己的堆栈。但是,所有的堆栈(可能除了一个)都必须是固定大小的,以免它们相互重叠或与堆重叠。

但是,任何使用堆栈的编程语言也可以通过以不同的方式管理堆栈来实现:通过使用列表数据结构或类似的结构来保存堆栈帧,但实际上是在堆上分配的。在堆满之前不会出现堆栈溢出。

关于memory-management - Go怎么没有stackoverflow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4226964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com