添加Alloc空间配置器的类声明
This commit is contained in:
49
TinySTL/Alloc.h
Normal file
49
TinySTL/Alloc.h
Normal file
@@ -0,0 +1,49 @@
|
||||
#ifndef _ALLOC_H_
|
||||
#define _ALLOC_H_
|
||||
|
||||
namespace TinySTL{
|
||||
|
||||
/*
|
||||
**<2A>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
class alloc{
|
||||
private:
|
||||
enum EAlign{ ALIGN = 8};//С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>߽<EFBFBD>
|
||||
enum EMaxBytes{ MAXBYTES = 128};//С<><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
enum ENFreeLists{ NFREELISTS = (EMaxBytes::MAXBYTES / EAlign::ALIGN)};//free-lists<74>ĸ<EFBFBD><C4B8><EFBFBD>
|
||||
private:
|
||||
//free-lists<74>Ľڵ㹹<DAB5><E3B9B9>
|
||||
union obj{
|
||||
union obj *next;
|
||||
char client[1];
|
||||
};
|
||||
|
||||
static obj *free_list[ENFreeLists::NFREELISTS];
|
||||
private:
|
||||
static char *start_free;//<2F>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>
|
||||
static char *end_free;//<2F>ڴ<EFBFBD><DAB4>ؽ<EFBFBD><D8BD><EFBFBD>λ<EFBFBD><CEBB>
|
||||
static size_t heap_size;//
|
||||
private:
|
||||
//<2F><>bytes<65>ϵ<EFBFBD><CFB5><EFBFBD>8<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>
|
||||
static size_t ROUND_UP(size_t bytes){
|
||||
return ((bytes + EAlign::ALIGN - 1) & ~(EAlign::ALIGN - 1));
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD>n<EFBFBD><6E>free-list<73><74>n<EFBFBD><6E>0<EFBFBD><30>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
static size_t FREELIST_INDEX(size_t bytes){
|
||||
return (((bytes)+EAlign::ALIGN - 1) / EAlign::ALIGN - 1);
|
||||
}
|
||||
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>СΪn<CEAA>Ķ<EFBFBD><C4B6><EFBFBD><F3A3ACB2><EFBFBD><EFBFBD>ܼ<EFBFBD><DCBC><EFBFBD><EFBFBD><EFBFBD>СΪn<CEAA><6E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>鵽free-list
|
||||
static void *refill(size_t n);
|
||||
//<2F><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ռ䣬<D5BC><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nobjs<6A><73><EFBFBD><EFBFBD>СΪsize<7A><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nobjs<6A><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㣬nobjs<6A><73><EFBFBD>ܻή<DCBB><E1BDB5>
|
||||
static char *chunk_alloc(size_t size, size_t& nobjs);
|
||||
|
||||
public:
|
||||
static void *allocate(size_t bytes);
|
||||
static void deallocate(void *ptr, size_t bytes);
|
||||
static void *reallocate(void *ptr, size_t old_sz, size_t new_sz);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user