source:
proiecte/swift/trunk/lib/hoard-371/src/heaplayers/bins4k.h
@
176
Last change on this file since 176 was 176, checked in by , 14 years ago | |
---|---|
File size: 1.4 KB |
Rev | Line | |
---|---|---|
[176] | 1 | // -*- C++ -*- |
2 | ||
3 | #if !defined(_BINS4K_H_) | |
4 | #define _BINS4K_H_ | |
5 | ||
6 | #include "bins.h" | |
7 | #include "sassert.h" | |
8 | ||
9 | namespace HL { | |
10 | ||
11 | template <class Header> | |
12 | class bins<Header, 4096> { | |
13 | ||
14 | public: | |
15 | bins (void) {} | |
16 | ||
17 | enum { NUM_BINS = 33 }; | |
18 | enum { BIG_OBJECT = 4096 - sizeof(Header) }; | |
19 | ||
20 | static const size_t _bins[NUM_BINS]; | |
21 | ||
22 | static inline int getSizeClass (size_t sz) { | |
23 | assert (sz <= BIG_OBJECT); | |
24 | if (sz < 8) { | |
25 | return 0; | |
26 | } else if (sz <= 128) { | |
27 | return ((sz + 7) >> 3) - 1; | |
28 | } else { | |
29 | return slowLookupSizeClass (sz); | |
30 | } | |
31 | } | |
32 | ||
33 | static inline size_t getClassSize (const int i) { | |
34 | assert (i >= 0); | |
35 | assert (i < NUM_BINS); | |
36 | return _bins[i]; | |
37 | } | |
38 | ||
39 | private: | |
40 | ||
41 | static int slowLookupSizeClass (const size_t sz) { | |
42 | // Find the size class for a given object size | |
43 | // (the smallest i such that _bins[i] >= sz). | |
44 | int sizeclass = 0; | |
45 | while (_bins[sizeclass] < sz) | |
46 | { | |
47 | sizeclass++; | |
48 | assert (sizeclass < NUM_BINS); | |
49 | } | |
50 | return sizeclass; | |
51 | } | |
52 | ||
53 | sassert<(BIG_OBJECT > 0)> verifyHeaderSize; | |
54 | ||
55 | }; | |
56 | } | |
57 | ||
58 | template <class Header> | |
59 | const size_t HL::bins<Header, 4096>::_bins[NUM_BINS] = {8UL, 16UL, 24UL, 32UL, 40UL, 48UL, 56UL, 64UL, 72UL, 80UL, 88UL, 96UL, 104UL, 112UL, 120UL, 128UL, 152UL, 176UL, 208UL, 248UL, 296UL, 352UL, 416UL, 496UL, 592UL, 704UL, 856UL, 1024UL, 1224UL, 1712UL, 2048UL, 3416UL, 4096UL - sizeof(Header)}; | |
60 | ||
61 | #endif | |
62 |
Note: See TracBrowser
for help on using the repository browser.