⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gc-kaffe.c

📁 java virtual machince kaffe
💻 C
字号:
/* * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved. * Copyright (c) 1999 by Hewlett-Packard Company.  All rights reserved. * * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK. * * Permission is hereby granted to use or copy this program * for any purpose,  provided the above notices are retained on all copies. * Permission to modify the code and to distribute modified code is granted, * provided the above notices are retained, and a notice that the code was * modified is included with the above copyright notice. * *//* * Some parts are *   Copyright(c) 2004 *      The Kaffe.org's developers. See ChangeLog for details */#include <stddef.h>#include <stdlib.h>#include <gc/gc.h>#include <gc/gc_mark.h>#include "gc-kaffe.h"static int GC_kaffe_proc;static int GC_kaffe_kind;static void ** GC_kaffe_freelist;/* This function is not exported by Boehm GC. However it is necessary * to defer the finalization of objects and push it to the finalizerMan * thread. */extern void GC_notify_or_invoke_finalizers(void);/* We need a mechanism to release the lock and invoke finalizers.	*//* We don't really have an opportunity to do this on a rarely executed	*//* path on which the lock is not held.  Thus we check at a 		*//* rarely executed point at which it is safe to release the lock.	*//* We do this even where we could just call GC_INVOKE_FINALIZERS,	*//* since it's probably cheaper and certainly more uniform.		*//* FIXME - Consider doing the same elsewhere?				*/static void maybe_finalize(){   static GC_word last_finalized_no = 0;   if (GC_gc_no == last_finalized_no) return;   GC_notify_or_invoke_finalizers();   last_finalized_no = GC_gc_no;}/* Allocate an object, clear it */void * GC_kaffe_malloc(size_t lb){  register void * op;  maybe_finalize();  op = (void *) GC_generic_malloc((GC_word)lb, GC_kaffe_kind);  if (0 == op) {    return(GC_oom_fn(lb));  }  return(op);}void GC_kaffe_init(GC_mark_proc proc){  GC_kaffe_freelist = GC_new_free_list();  GC_kaffe_proc = GC_new_proc(proc);  GC_kaffe_kind = GC_new_kind(GC_kaffe_freelist,			      GC_MAKE_PROC(GC_kaffe_proc, 0),			      0, 1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -