mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
Return unused parts of the stack to the OS
* libguile/vm.h (struct scm_vm): Reorder fields. Add "sp_max_since_gc" field. * libguile/vm-engine.c (ALLOC_FRAME, RESET_FRAME): * libguile/vm.c (vm_return_to_continuation) (vm_reinstate_partial_continuation, scm_call_n): In places where we could increase the stack height, update sp_max_since_gc. (vm_expand_stack): Relocate sp_max_since_gc on expansion. (scm_bootstrap_vm): Record the page size using gnulib's getpagesize. (return_unused_stack_to_os): New routine, run when marking stacks.
This commit is contained in:
parent
7161ec1133
commit
7dba1c2ff1
3 changed files with 63 additions and 11 deletions
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2001, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2001, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
|
@ -39,10 +39,11 @@ struct scm_vm {
|
|||
scm_t_uint32 *ip; /* instruction pointer */
|
||||
SCM *sp; /* stack pointer */
|
||||
SCM *fp; /* frame pointer */
|
||||
size_t stack_size; /* stack size */
|
||||
SCM *stack_base; /* stack base address */
|
||||
SCM *stack_limit; /* stack limit address */
|
||||
int trace_level; /* traces enabled if trace_level > 0 */
|
||||
SCM *sp_max_since_gc; /* highest sp since last gc */
|
||||
size_t stack_size; /* stack size */
|
||||
SCM *stack_base; /* stack base address */
|
||||
size_t max_stack_size;
|
||||
SCM hooks[SCM_VM_NUM_HOOKS]; /* hooks */
|
||||
int engine; /* which vm engine we're using */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue