NP
Size: a a a
NP
NP
S
S
S
S
S
S
S
A
DV
template<typename T>
class memory_allocator {
public:
typedef T value_type;
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
typedef T* pointer;
typedef const T* const_pointer;
typedef T& reference;
typedef const T& const_reference;
template<typename U>
struct rebind { typedef memory_allocator<U> other; };
private:
// для связного списка (придётся логику самому писать)
struct block {
pointer start, end, pos;
block *prev, *next;
};
size_type block_size_;
block *root_, *freed_, *pos_;
public:
explicit memory_allocator(size_type sz = 4096):
block_size_(sz),root_(nullptr),freed_(nullptr),pos_(nullptr) {}
};
A
template<typename T>
class memory_allocator {
public:
typedef T value_type;
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
typedef T* pointer;
typedef const T* const_pointer;
typedef T& reference;
typedef const T& const_reference;
template<typename U>
struct rebind { typedef memory_allocator<U> other; };
private:
// для связного списка (придётся логику самому писать)
struct block {
pointer start, end, pos;
block *prev, *next;
};
size_type block_size_;
block *root_, *freed_, *pos_;
public:
explicit memory_allocator(size_type sz = 4096):
block_size_(sz),root_(nullptr),freed_(nullptr),pos_(nullptr) {}
};