添加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