xref: /haiku/src/system/libroot/posix/malloc/hoard2/config.h (revision 9a6a20d4689307142a7ed26a1437ba47e244e73f)
1 ///-*-C++-*-//////////////////////////////////////////////////////////////////
2 //
3 // Hoard: A Fast, Scalable, and Memory-Efficient Allocator
4 //        for Shared-Memory Multiprocessors
5 // Contact author: Emery Berger, http://www.cs.utexas.edu/users/emery
6 //
7 // Copyright (c) 1998-2000, The University of Texas at Austin.
8 //
9 // This library is free software; you can redistribute it and/or modify
10 // it under the terms of the GNU Library General Public License as
11 // published by the Free Software Foundation, http://www.fsf.org.
12 //
13 // This library is distributed in the hope that it will be useful, but
14 // WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 // Library General Public License for more details.
17 //
18 //////////////////////////////////////////////////////////////////////////////
19 #ifndef _CONFIG_H_
20 #define _CONFIG_H_
21 
22 #ifndef _REENTRANT
23 #	define _REENTRANT		// If defined, generate a multithreaded-capable version.
24 #endif
25 
26 #ifndef USER_LOCKS
27 #	define USER_LOCKS 1		// Use our own user-level locks if they're available for the current architecture.
28 #endif
29 
30 #define HEAP_LOG 0		// If non-zero, keep a log of heap accesses.
31 
32 
33 ///// You should not change anything below here. /////
34 
35 
36 // The base of the exponential used for size classes.
37 // An object is in size class i if
38 //        base^(b+i-1) * ALIGNMENT < size <= base^(b+i) * ALIGNMENT,
39 // where b = log_base(ALIGNMENT).
40 // Note that this puts an upper-limit on internal fragmentation:
41 //   if SIZE_CLASS_BASE is 1.2, then we will never see more than
42 //   20% internal fragmentation (for aligned requests).
43 
44 #define SIZE_CLASS_BASE 1.2
45 #define MAX_INTERNAL_FRAGMENTATION 2
46 
47 // The number of groups of superblocks we maintain based on what
48 // fraction of the superblock is empty. NB: This number must be at
49 // least 2, and is 1 greater than the EMPTY_FRACTION in heap.h.
50 
51 enum { SUPERBLOCK_FULLNESS_GROUP = 9 };
52 
53 
54 // DO NOT CHANGE THESE.  They require running of maketable to replace
55 // the values in heap.cpp for the _numBlocks array.
56 
57 #define HEAP_DEBUG 0		// If non-zero, keeps extra info for sanity checking.
58 #define HEAP_STATS 0		// If non-zero, maintain blowup statistics.
59 #define HEAP_FRAG_STATS 0	// If non-zero, maintain fragmentation statistics.
60 
61 // A simple (and slow) leak checker
62 #define HEAP_LEAK_CHECK 0
63 #define HEAP_CALL_STACK_SIZE 8
64 
65 // A simple wall checker
66 #define HEAP_WALL 0
67 #define HEAP_WALL_SIZE 32
68 
69 // CACHE_LINE = The number of bytes in a cache line.
70 
71 #if defined(i386) || defined(WIN32)
72 #	define CACHE_LINE 32
73 #endif
74 
75 #ifdef sparc
76 #	define CACHE_LINE 64
77 #endif
78 
79 #ifdef __sgi
80 #	define CACHE_LINE 128
81 #endif
82 
83 #ifndef CACHE_LINE
84 // We don't know what the architecture is,
85 // so go for the gusto.
86 #define CACHE_LINE 64
87 #endif
88 
89 #ifdef __GNUG__
90 // Use the max operator, an extension to C++ found in GNU C++.
91 #	define MAX(a,b) ((a) >? (b))
92 #else
93 #	define MAX(a,b) (((a) > (b)) ? (a) : (b))
94 #endif
95 
96 #ifdef __HAIKU__
97 #if __cplusplus >= 201103L
98 #	define HAIKU_MEMORY_ALIGNMENT alignof(max_align_t)
99 #else
100 #	define HAIKU_MEMORY_ALIGNMENT 8
101 #endif
102 #endif
103 
104 #endif // _CONFIG_H_
105