How about avoiding hot split by changing the deallocation algorithm to allow empty blocks and see what happens?
How about avoiding hot split by changing the deallocation algorithm to allow empty blocks and see what happens?
Not really. With segmented stacks, when you hit the end of a stack, you must (1) allocate a new segment to extend the stack and (2) copy the current function frame to the new segment and resume execution. Then, when the function returns, you have to (3) deallocate the new segment and shrink the stack, and (4) resume execution of the last function frame on the previous stack segment.
Now, steps (1) and (3) are optional, but steps (2) and (4) are not, and incur a significant overhead (compared with non-segmented, contiguous stack, e.g. C stack).
Their point is that if you have done something wrong if you have to dynamically turn on profiling to keep the stack from catching on fire.