1// BlockAllocatorMisc.h 2 3#ifndef BLOCK_ALLOCATOR_MISC_H 4#define BLOCK_ALLOCATOR_MISC_H 5 6#include "Block.h" 7#include "Misc.h" 8 9// block alignment -- start offsets and size 10static const size_t kBlockAlignment = 4; // must be a power of 2 11 12// block_align_{floor,ceil} 13static inline size_t block_align_floor(size_t value) 14 { return value & ~(kBlockAlignment - 1); } 15static inline size_t block_align_ceil(size_t value) 16 { return (value + kBlockAlignment - 1) & ~(kBlockAlignment - 1); } 17 18// minimal size of a gross/net block 19// BAD DOG: No initializers in the kernel! 20//static const size_t kMinBlockSize = block_align_ceil(sizeof(TFreeBlock)); 21#define kMinBlockSize (block_align_ceil(sizeof(TFreeBlock))) 22static const size_t kMinNetBlockSize = 8; 23 24static const size_t kDefragmentingTolerance = 10240; 25 26// bucket_containing_size -- bucket for to contain an area with size 27static inline int bucket_containing_size(size_t size) 28 { return fls(size / kMinNetBlockSize) + 1; } 29 30// bucket_containing_min_size -- bucket containing areas >= size 31static inline int 32bucket_containing_min_size(size_t size) 33 { return (size ? bucket_containing_size(size - 1) + 1 : 0); } 34 35 36#endif // BLOCK_ALLOCATOR_MISC_H 37