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

Custom Memory Allocation

Boost , Boost.Asio , Core Concepts and Functionality

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

Многие асинхронные операции должны выделять объект для хранения состояния, связанного с операцией. Например, для реализации Win32 требуется OVERLAPPED-производные объекты для передачи в функции Win32 API.

Кроме того, программы обычно содержат легко идентифицируемые цепочки асинхронных операций. Реализация полудуплексного протокола (например, HTTP-сервер) будет иметь одну цепочку операций на клиента (приемы, за которыми следуют отправки). Полная реализация дуплексного протокола будет иметь две цепи, выполняющиеся параллельно. Программы должны иметь возможность использовать эти знания для повторного использования памяти для всех асинхронных операций в цепи.

При наличии копии определяемого пользователем Handler объекта h, если реализации необходимо выделить память, связанную с этим обработчиком, она выполнит код:

void* pointer = asio_handler_allocate(size, &h);

Точно так же, чтобы распределить память, она будет выполнять:

asio_handler_deallocate(pointer, size, &h);

Эти функции расположены с использованием аргумент-зависимого поиска. Реализация обеспечивает реализацию по умолчанию вышеуказанных функций в пространстве имен asio:

void* asio_handler_allocate(size_t, ...);
void asio_handler_deallocate(void*, size_t, ...);

которые реализуются в терминах ::операторновый() и ::оператор() соответственно.

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

Настраиваемые функции распределения памяти могут быть вызваны из любого созданного пользователем потока, который вызывает функцию библиотеки. Реализация гарантирует, что для асинхронных операций, включенных в библиотеку, реализация не будет делать параллельные вызовы функциям распределения памяти для этого обработчика. Реализация вставит соответствующие барьеры памяти для обеспечения правильной видимости памяти, если функции распределения должны быть вызваны из разных потоков.

See Also

asio_handler_allocate, asio_handler_deallocate, custom memory allocation example (C++03), custom memory allocation example (C++11).


PrevUpHomeNext

Статья Custom Memory Allocation раздела Boost.Asio Core Concepts and Functionality может быть полезна для разработчиков на c++ и boost.




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



:: Главная :: Core Concepts and Functionality ::


реклама


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

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 18:28:08/0.006382942199707/0