|
||||
|
Примитивы управления памятью (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. |
|
||
Главная | В избранное | Наш E-MAIL | Прислать материал | Нашёл ошибку | Наверх |
||||
|