#include #include #define SIZE (1000000 * sizeof(int)) static scm_t_bits model_smob_t; static size_t free_model(SCM smob) { int* ptr = (int *)SCM_SMOB_DATA(smob); printf("Freeing #%d\n", *ptr); fflush(stdout); scm_gc_free (ptr, SIZE, "int array"); ptr = NULL; return 0; } void func(void) { printf("gc at exit\n"); fflush(stdout); scm_gc(); } int main (int argc, char ** argv) { SCM s; atexit(func); scm_init_guile(); model_smob_t = scm_make_smob_type("model", sizeof(int *)); scm_set_smob_free(model_smob_t, free_model); for (int i = 1; i <= 10; i ++) { printf("Allocating #%d\n", i); int *ptr = (int *) scm_gc_malloc (SIZE, "int array"); *ptr = i; SCM_NEWSMOB(s, model_smob_t, (scm_t_bits) ptr); s = SCM_BOOL_F; } // printf("gc at end of main\n"); // fflush(stdout); //scm_gc(); return 0; }