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

📄 gc_tiny_fl.h

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 H
字号:
/*  * Copyright (c) 1999-2005 Hewlett-Packard Development Company, L.P. * * 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. */#ifndef GC_TINY_FL_H#define GC_TINY_FL_H/* * Constants and data structures for "tiny" free lists. * These are used for thread-local allocation or in-lined allocators. * Each global free list also essentially starts with one of these. * However, global free lists are known to the GC.  "Tiny" free lists * are basically private to the client.  Their contents are viewed as * "in use" and marked accordingly by the core of the GC. *  * Note that inlined code might know about the layout of these and the constants * involved.  Thus any change here may invalidate clients, and such changes should * be avoided.  Hence we keep this as simple as possible. *//* * We always set GRANULE_BYTES to twice the length of a pointer. * This means that all allocation requests are rounded up to the next * multiple of 16 on 64-bit architectures or 8 on 32-bit architectures. * This appears to be a reasonable compromise between fragmentation overhead * and space usage for mark bits (usually mark bytes). * On many 64-bit architectures some memory references require 16-byte * alignment, making this necessary anyway. * For a few 32-bit architecture (e.g. x86), we may also need 16-byte alignment * for certain memory references.  But currently that does not seem to be the * default for all conventional malloc implementations, so we ignore that * problem. * It would always be safe, and often useful, to be able to allocate very * small objects with smaller alignment.  But that would cost us mark bit * space, so we no longer do so. */#ifndef GC_GRANULE_BYTES  /* GC_GRANULE_BYTES should not be overridden in any instances of the GC */  /* library that may be shared between applications, since it affects	  */  /* the binary interface to the library.				  */# if defined(__LP64__) || defined (_LP64) || defined(_WIN64) \	|| defined(__s390x__) || defined(__x86_64__) \	|| defined(__alpha__) || defined(__powerpc64__) \	|| defined(__arch64__)#  define GC_GRANULE_BYTES 16#  define GC_GRANULE_WORDS 2# else#  define GC_GRANULE_BYTES 8#  define GC_GRANULE_WORDS 2# endif#endif /* !GC_GRANULE_BYTES */#if GC_GRANULE_WORDS == 2#  define GC_WORDS_TO_GRANULES(n) ((n)>>1)#else#  define GC_WORDS_TO_GRANULES(n) ((n)*sizeof(void *)/GRANULE_BYTES)#endif/* A "tiny" free list header contains TINY_FREELISTS pointers to 	*//* singly linked lists of objects of different sizes, the ith one	*//* containing objects i granules in size.  Note that there is a list	*//* of size zero objects.						*/#ifndef GC_TINY_FREELISTS# if GC_GRANULE_BYTES == 16#   define GC_TINY_FREELISTS 25# else#   define GC_TINY_FREELISTS 33	/* Up to and including 256 bytes */# endif#endif /* !GC_TINY_FREELISTS *//* The ith free list corresponds to size i*GRANULE_BYTES	*//* Internally to the collector, the index can be computed with	*//* ROUNDED_UP_GRANULES.  Externally, we don't know whether	*//* DONT_ADD_BYTE_AT_END is set, but the client should know.	*//* Convert a free list index to the actual size of objects	*//* on that list, including extra space we added.  Not an	*//* inverse of the above.					*/#define RAW_BYTES_FROM_INDEX(i) ((i) * GC_GRANULE_BYTES)#endif /* GC_TINY_FL_H */

⌨️ 快捷键说明

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