Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Examples

Boost , The Boost C++ Libraries BoostBook Documentation Subset , Chapter 3. Boost.Align

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

В этом примере представлена альтернатива<std::unique_ptr>для объектов, выделенных с выровненной функцией распределения. Он определяется просто путем предоставления шаблона псевдонима, который использует<std::unique_ptr>с нашим выровненным удаляющим устройством вместо по умолчанию<std::default_delete>. Он также представляет собой альтернативу<std::make_unique>для создания этих выровненных уникальных указательных объектов. Он реализуется с использованием нашей выровненной функции распределения.

Implementation
#include <boost/align/aligned_alloc.hpp>
#include <boost/align/aligned_delete.hpp>
#include <boost/align/alignment_of.hpp>
#include <memory>
template<class T>
using aligned_ptr = std::unique_ptr<T,
    boost::alignment::aligned_delete>;
template<class T, class... Args>
inline aligned_ptr<T> make_aligned(Args&&... args)
{
    auto p = boost::alignment::aligned_alloc(boost::
        alignment::alignment_of<T>::value, sizeof(T));
    if (!p) {
        throw std::bad_alloc();
    }
    try {
        auto q = ::new(p) T(std::forward<Args>(args)...);
        return aligned_ptr<T>(q);
    } catch (...) {
        boost::alignment::aligned_free(p);
        throw;
    }
}
Usage
struct alignas(16) type {
    float data[4];
};
int main()
{
    auto p = make_aligned<type>();
    p.reset();
}

В этом примере представлена альтернатива<std::vector>, которая может быть использована с чрезмерно выровненными типами и позволяет указать минимальное выравнивание. Он определяется просто путем предоставления шаблона псевдонима, который использует<std::vector>с нашим выровненным распределителем.

Implementation
#include <boost/align/aligned_allocator.hpp>
#include <vector>
template<class T, std::size_t Alignment = 1>
using aligned_vector = std::vector<T,
    boost::alignment::aligned_allocator<T, Alignment> >;
Usage
enum
    : std::size_t {
    cache_line = 64
};
int main()
{
    aligned_vector<char, cache_line> v;
    v.emplace_back();
}

PrevUpHomeNext

Статья Examples раздела The Boost C++ Libraries BoostBook Documentation Subset Chapter 3. Boost.Align может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 3. Boost.Align ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 17:50:35/0.027991056442261/1