添加Alloc空间配置器的类声明

This commit is contained in:
邹晓航
2014-09-17 09:56:06 +08:00
parent dfe5081a99
commit d8748d5c54

49
TinySTL/Alloc.h Normal file
View 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