Примитивы управления памятью (Memory Handling Primitives)

We use cookies. Read the Privacy and Cookie Policy

Примитивы управления памятью (Memory Handling Primitives)

Чтобы получать типичный указатель на неинициализированный буфер памяти данного размера, определена следующая функция:

template ‹class T›

inline T* allocate(ptrdiff_t n, Т*); // n ›= 0

Размер (в байтах) распределённого буфера - не меньше n*sizeof(T).

Для каждой модели памяти имеется соответствующий шаблон функции allocate, определённый с типом первого параметра, являющимся типом расстояния указателей в модели памяти.

Например, если система трансляции поддерживает _huge указатели с типом расстояния long long, обеспечивается следующая шаблонная функция:

template ‹class T›

inline T _huge* allocate(long long n, T _huge *);

Также обеспечиваются следующие функции:

template ‹class T›

inline void deallocate(T* buffer);

template ‹class T1, class T2›

inline void construct(T1* p, const T2& value) {new (p) T1(value);}

template ‹class T›

inline void destroy(T* pointer) {pointer-›~T();}

deallocate освобождает буфер, выделенный allocate. Для каждой модели памяти имеются соответствующие шаблоны функций deallocate, construct и destroy, определённые с типом первого параметра, являющимся типом указателя в модели памяти.

template ‹class T›

pair‹T*, ptrdiff_t› get_temporary_buffer(ptrdiff_t n, T*);

template ‹class T›

void return_temporary_buffer(T* p);

get_temporary_buffer ищет наибольший буфер, не больше чем n*sizeof(T), и возвращает пару, состоящую из адреса и размера (в единицах sizeof(T)) буфера. return_temporary_buffer возвращает буфер, выделенный get_temporary_buffer.