Below you will find pages that utilize the taxonomy term “Stack”
January 25, 2021
Golang中Stack的管理
"\u003ch1 id=\"栈的演变\"\u003e栈的演变\u003c/h1\u003e\n\u003cp\u003e在 Go1.13之前的版本,Golang 栈管理是使用的\u003ccode\u003e分段栈(Segment Stacks)\u003c/code\u003e机制来实现的,由于sgement stack 存在 \u003ccode\u003e热分裂(hot split\u003c/code\u003e)的问题,后面版本改为采用\u003ccode\u003e连续栈( [Contiguous stacks](https://docs.google.com/document/d/1wAaf1rYoM4S4gtnPh0zOlGzWtrZFQ5suE8qr2sD8uWQ/pub))\u003c/code\u003e机制( \u003ca href=\"https://golang.org/doc/go1.3#stacks\"\u003e说明\u003c/a\u003e)。\u003c/p\u003e\n\u003ch2 id=\"分段栈segment-stack\"\u003e分段栈(Segment Stack)\u003c/h2\u003e\n\u003cp\u003e分段栈是指开始时只有一个stack,当需要更多的 stack 时,就再去申请一个,然后将多个stack 之间用双向链接连接在一起。当使用完成后,再将无用的 \u003ccode\u003estack\u003c/code\u003e 从链接中删除释放内存。\u003cimg src=\"https://blogstatic.haohtml.com/uploads/2021/01/d2b5ca33bd970f64a6301fa75ae2eb22-3.png\" alt=\"\"\u003esegment stack\u003c/p\u003e\n\u003cp\u003e可以看到这样确实实现了stack 按需增长和收缩,在增加新stack时不需要拷贝原来的数据,系统使用率挺高的。但在一定特别的情况下会存在 \u003ccode\u003e热分裂(hot split)\u003c/code\u003e 的问题。\u003c/p\u003e\n\u003cp\u003e当一个 stack 即将用完的时候,任意一个函数都会导致堆栈的扩容,当函数执行完返回后,又要触发堆栈的收缩。如果这个操作 …\u003c/p\u003e"