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

📄 gc_typed.h

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 H
字号:
/*  * Copyright 1988, 1989 Hans-J. Boehm, Alan J. Demers * Copyright (c) 1991-1994 by Xerox Corporation.  All rights reserved. * Copyright 1996 Silicon Graphics.  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 simple primitives for allocation with explicit type information. * Facilities for dynamic type inference may be added later. * Should be used only for extremely performance critical applications, * or if conservative collector leakage is otherwise a problem (unlikely). * Note that this is implemented completely separately from the rest * of the collector, and is not linked in unless referenced. * This does not currently support GC_DEBUG in any interesting way. *//* Boehm, May 19, 1994 2:13 pm PDT */#ifndef _GC_TYPED_H# define _GC_TYPED_H# ifndef _GC_H#   include "gc.h"# endif#ifdef __cplusplus  extern "C" {#endiftypedef GC_word * GC_bitmap;	/* The least significant bit of the first word is one if	*/	/* the first word in the object may be a pointer.		*/	# define GC_WORDSZ (8*sizeof(GC_word))# define GC_get_bit(bm, index) \		(((bm)[index/GC_WORDSZ] >> (index%GC_WORDSZ)) & 1)# define GC_set_bit(bm, index) \		(bm)[index/GC_WORDSZ] |= ((GC_word)1 << (index%GC_WORDSZ))# define GC_WORD_OFFSET(t, f) (offsetof(t,f)/sizeof(GC_word))# define GC_WORD_LEN(t) (sizeof(t)/ sizeof(GC_word))# define GC_BITMAP_SIZE(t) ((GC_WORD_LEN(t) + GC_WORDSZ-1)/GC_WORDSZ)typedef GC_word GC_descr;GC_API GC_descr GC_make_descriptor GC_PROTO((GC_bitmap bm, size_t len));		/* Return a type descriptor for the object whose layout	*/		/* is described by the argument.			*/		/* The least significant bit of the first word is one	*/		/* if the first word in the object may be a pointer.	*/		/* The second argument specifies the number of		*/		/* meaningful bits in the bitmap.  The actual object 	*/		/* may be larger (but not smaller).  Any additional	*/		/* words in the object are assumed not to contain 	*/		/* pointers.						*/		/* Returns a conservative approximation in the		*/		/* (unlikely) case of insufficient memory to build	*/		/* the descriptor.  Calls to GC_make_descriptor		*/		/* may consume some amount of a finite resource.  This	*/		/* is intended to be called once per type, not once	*/		/* per allocation.					*//* It is possible to generate a descriptor for a C type T with	*//* word aligned pointer fields f1, f2, ... as follows:			*//*									*//* GC_descr T_descr;                                                    *//* GC_word T_bitmap[GC_BITMAP_SIZE(T)] = {0};				*//* GC_set_bit(T_bitmap, GC_WORD_OFFSET(T,f1));				*//* GC_set_bit(T_bitmap, GC_WORD_OFFSET(T,f2));				*//* ...									*//* T_descr = GC_make_descriptor(T_bitmap, GC_WORD_LEN(T));		*/GC_API GC_PTR GC_malloc_explicitly_typed			GC_PROTO((size_t size_in_bytes, GC_descr d));		/* Allocate an object whose layout is described by d.	*/		/* The resulting object MAY NOT BE PASSED TO REALLOC.	*/		/* The returned object is cleared.			*/GC_API GC_PTR GC_malloc_explicitly_typed_ignore_off_page                        GC_PROTO((size_t size_in_bytes, GC_descr d));		GC_API GC_PTR GC_calloc_explicitly_typed			GC_PROTO((size_t nelements,  				  size_t element_size_in_bytes,  				  GC_descr d));  	/* Allocate an array of nelements elements, each of the	*/  	/* given size, and with the given descriptor.		*/  	/* The elemnt size must be a multiple of the byte	*/  	/* alignment required for pointers.  E.g. on a 32-bit	*/  	/* machine with 16-bit aligned pointers, size_in_bytes	*/  	/* must be a multiple of 2.				*/	/* Returned object is cleared.				*/#ifdef GC_DEBUG#   define GC_MALLOC_EXPLICITLY_TYPED(bytes, d) GC_MALLOC(bytes)#   define GC_CALLOC_EXPLICITLY_TYPED(n, bytes, d) GC_MALLOC(n*bytes)#else#  define GC_MALLOC_EXPLICITLY_TYPED(bytes, d) \	GC_malloc_explicitly_typed(bytes, d)#  define GC_CALLOC_EXPLICITLY_TYPED(n, bytes, d) \	GC_calloc_explicitly_typed(n, bytes, d)#endif /* !GC_DEBUG */#ifdef __cplusplus  } /* matches extern "C" */#endif#endif /* _GC_TYPED_H */

⌨️ 快捷键说明

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