Rust updates
David Piepgrass
qwertie256 at gmail.com
Wed Jul 11 11:39:24 PDT 2012
On Wednesday, 11 July 2012 at 18:31:23 UTC, David Piepgrass wrote:
>>>> The trouble with segmented stacks are:
>>>>
>>>> 1. they have a significant runtime penalty
>>> Why?
>> Extra instructions generated for each function.
> Every function? Why?
Looks like I misunderstood what "Segmented stacks" are. From an
LLVM page:
> Segmented stack allows stack space to be allocated
> incrementally than as a monolithic chunk (of some worst case
> size) at thread initialization. This is done by allocating
> stack blocks (henceforth called stacklets) and linking them
> into a doubly linked list. The function prologue is responsible
> for checking if the current stacklet has enough space for the
> function to execute; and if not, call into the libgcc runtime
> to allocate more stack space. Support for segmented stacks on
> x86 / Linux is currently being worked on.
I envision a rather different implementation for 32-bit code.
1. Reserve a normal stack with one 4K page committed + some known
minimum amount of uncommitted memory, e.g. another 8 KB
uncommitted with a guard page that the program can trap via OS
facilities (signals, etc.)
2. When the stack overflows, move the stack to a new, much larger
region of Virtual Memory. Much like languages that support
compacting garbage collectors, the language / runtime environment
must be designed to support this.
3. If one needs to call C code, one preallocates the maximum
expected virtual memory needed, e.g. 32 MB.
More information about the Digitalmars-d
mailing list