1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-10 14:00:21 +02:00

* gc.c (scm_gc_stats): Inserted explanation of local_scm_mtrigger

etc.
(scm_gc_yield_1): New variable: Holds previous yield.  Used to
make better judgements.
This commit is contained in:
Mikael Djurfeldt 2000-03-20 14:57:04 +00:00
parent f1d316dd37
commit 37ddcaf606

View file

@ -42,6 +42,8 @@
/* Software engineering face-lift by Greg J. Badros, 11-Dec-1999,
gjb@cs.washington.edu, http://www.cs.washington.edu/homes/gjb */
/* #define DEBUGINFO */
#include <stdio.h>
#include "_scm.h"
@ -255,6 +257,7 @@ long scm_mallocated = 0;
unsigned long scm_gc_cells_collected;
#ifdef GUILE_NEW_GC_SCHEME
unsigned long scm_gc_yield;
static unsigned long scm_gc_yield_1 = 0; /* previous GC yield */
#endif
unsigned long scm_gc_malloc_collected;
unsigned long scm_gc_ports_collected;
@ -733,6 +736,7 @@ scm_gc_start (const char *what)
scm_gc_rt = SCM_INUM (scm_get_internal_run_time ());
scm_gc_cells_collected = 0;
#ifdef GUILE_NEW_GC_SCHEME
scm_gc_yield_1 = scm_gc_yield;
scm_gc_yield = (scm_cells_allocated
+ master_cells_allocated (&scm_master_freelist)
+ master_cells_allocated (&scm_master_freelist2));
@ -800,8 +804,12 @@ adjust_gc_trigger (scm_freelist_t *freelist)
*/
if (freelist->gc_trigger_fraction)
{
/* Pick largest of last two yields. */
int yield = (scm_gc_yield_1 > scm_gc_yield
? scm_gc_yield_1
: scm_gc_yield);
int delta = ((SCM_HEAP_SIZE * freelist->gc_trigger_fraction / 100)
- scm_gc_yield);
- yield);
#ifdef DEBUGINFO
fprintf (stderr, " after GC = %d, delta = %d\n",
scm_cells_allocated,
@ -832,6 +840,12 @@ scm_gc_for_newcell (scm_freelist_t *master, SCM *freelist)
}
else
{
#ifdef DEBUGINFO
fprintf (stderr, "allocated = %d, ",
scm_cells_allocated
+ master_cells_allocated (&scm_master_freelist)
+ master_cells_allocated (&scm_master_freelist2));
#endif
scm_igc ("cells");
adjust_gc_trigger (master);
}