stack
split stack原理与问题
栈满后每次调用将使用新的stack, 当调用返回会释放栈。如果同样的调用反复发生在循环里面 alloc/free的导致严重的消耗。
栈的申请与释放工作不会停止的(这里我的理解是每次要将当前栈大小传递给函数),都有额外的工作需要做(检查工作负担很重啊)。
原文:
Current split stack mechanism has a “hot split” problem - if the stack is almost full, a call will force a new stack chunk to be allocated. When that call returns, the new stack chunk is freed. If the same call happens repeatedly in a tight loop, the overhead of the alloc/free causes significant overhead.
Stack allocation/deallocation work is never complete with split stacks - every time the stack size passes a threshold in either direction, extra work is required.
Contiguous stack:
Contiguous stack 用于避免split stack带来的问题。
Contiguous stack原理就是当栈要用完的时候, 申请一个新的更大的, 将老栈数据拷贝进新栈, 当然还有一个麻烦的东西要做,指针(指向栈的指针)调整。
当检查(比split stack的检查优势)到当前栈大小不够时就要做copy stack工作了。
分配一个新的更大的栈。
拷贝老栈数据到新栈。
调整真正的指针(我的理解是通过stack map辨别指针)
调整指向栈的指针。
blog comments powered by Disqus