3 ms·
You could add step (5) recognize that you have a hot split and amend step #2 to copy all of the hot frames to the new segment. Their point is that if you have
by Daniel_Newby 13y ago
You could add step (5) recognize that you have a hot split and amend step #2 to copy all of the hot frames to the new segment.
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.
- tomp 13y agoThat's a possible solution, but it requires that stack is relocatable (i.e. that you can find and rewrite all pointers to data on the stack), which is a significant complication with regards to a segmented stacks implementation. If you have a relocatable stack, you might as well use copy-the-whole-stack strategy with continuous stacks.
- simonmar 13y agoSegmented stacks are better even if you have a relocatable stack. GHC switched from monolithic copy-the-whole-thing-to-grow-it to segmented stacks a while ago, and it was a big win. Not just because we waste less space, but because the GC knows when individual stack segments are dirty so that it doesn't need to traverse the whole stack. To avoid the thrashing issue we copy the top 1KB of the previous stack chunk into the new stack chunk when we allocate a new chunk.