Управляет блоками памяти в монотонно растущем буфере с безисключительным выделением и групповым освобождением.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 993d3b66f0fcПроисхождениеОткрытые вопросы (2)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Управляет блоками памяти в монотонно растущем буфере с безисключительным выделением и групповым освобождением.
Класс ara::core::MonotonicBufferResource предоставляет специализированный ресурс памяти для быстрого, монотонного выделения из фиксированного буфера памяти или через вышестоящий upstream-ресурс. Запрошенная память выделяется пошагово и при отдельных деаллокациях не освобождается немедленно, а сбрасывается только пакетно через release() ([SWS_CORE_06530]). Все операции объявлены полностью безисключительными, при этом нехватка памяти сигнализируется возвратом nullptr вместо генерации исключения ([SWS_CORE_06569]). Экземпляры не являются копируемыми и требуют внешней синхронизации при параллельном доступе из нескольких потоков.
Контекст
Класс ara::core::MonotonicBufferResource представляет собой конкретный ресурс памяти в составе модуля core платформы AUTOSAR Adaptive и наследует базовый класс ara::core::MemoryResource. Он адаптирует известную из стандарта C++ концепцию std::pmr::monotonic_buffer_resource из [mem.res.monotonic.buffer] для связанных с безопасностью и детерминированных автомобильных приложений. Основная роль класса заключается в обслуживании запросов на выделение из непрерывной области памяти с минимальными накладными расходами на управление за счет монотонного распределения памяти.
В качестве партнеров по взаимодействию выступают, с одной стороны, вызывающие компоненты, полиморфные аллокаторы и контейнеры, запрашивающие блоки памяти во время выполнения. С другой стороны, класс взаимодействует с опциональным вышестоящим ресурсом памяти upstream (MemoryResource). Этот upstream-ресурс может передаваться через конструкторы, такие как [SWS_CORE_06521], и запрашиваться через метод доступа upstream_resource() ([SWS_CORE_06531]).
Жизненный цикл
Инициализацией ara::core::MonotonicBufferResource можно управлять с помощью нескольких конструкторов. Наряду с конструктором по умолчанию без параметров ([SWS_CORE_06524]) доступны перегрузки, принимающие явный upstream-ресурс ([SWS_CORE_06521]), определяющие начальный размер буфера ([SWS_CORE_06525], [SWS_CORE_06522]) или использующие внешне предоставленную область сырой памяти (void* buffer, std::size_t buffer_size) в качестве исходного буфера ([SWS_CORE_06526], [SWS_CORE_06523]).
В отношении прав владения класс определен как строго некопируемый: конструктор копирования ([SWS_CORE_06527]) и оператор присваивания с копированием ([SWS_CORE_06529]) удалены (=delete). Однако, в отличие от стандарта ISO 14882, класс AUTOSAR реализует явную семантику перемещения через конструктор перемещения ([SWS_CORE_06576]) и оператор присваивания с перемещением ([SWS_CORE_06577]), каждый из которых определен как noexcept=default.
Уничтожение выполняется через деструктор ~MonotonicBufferResource() ([SWS_CORE_06528]). Существенное отличие AUTOSAR от стандарта заключается в том, что деструктор не объявлен виртуальным. С помощью метода release() ([SWS_CORE_06530]) вся выделенная память может быть сброшена до истечения времени жизни объекта.
Типичный сценарий использования включает предоставление, непрерывное выделение и пакетное освобождение:
Инстанцирование: приложение создает экземпляр, например, с заданием размера буфера и upstream-ресурса ([SWS_CORE_06522]) или фиксированного буфера ([SWS_CORE_06526]).
Выделение: запросы памяти обслуживаются через защищенный метод do_allocate(bytes, alignment) ([SWS_CORE_06569]). Если имеющегося буфера недостаточно, экземпляр запрашивает новый буфер у upstream-ресурса.
Сброс буфера: с помощью release() ([SWS_CORE_06530]) все блоки памяти, полученные через upstream, освобождаются за один раз, и буфер становится готов к новым циклам.
Сравнение ресурсов: с помощью do_is_equal() ([SWS_CORE_06571]) можно проверить, идентичны ли два ресурса памяти.
Класс следует строгим требованиям для встраиваемых систем без исключений: все функции-члены, конструкторы и операторы объявлены как noexcept и обеспечивают полную безопасность относительно исключений.
В случае ошибки поведение намеренно отличается от стандартной библиотеки:
Неудачное выделение памяти: если запрос в do_allocate() ([SWS_CORE_06569]) не может быть обслужен, исключение std::bad_alloc не выбрасывается, а возвращается nullptr. Вызывающие стороны обязаны проверять возвращаемое значение на nullptr.
Ошибка при деаллокации: если при освобождении в do_deallocate() ([SWS_CORE_06570]) возникает ошибка, согласно спецификации она негласно игнорируется.
Уничтожение через указатель на базовый класс: поскольку деструктор ([SWS_CORE_06528]) не является виртуальным, уничтожение через указатель на базовый класс MemoryResource, вероятно, приведет к неопределенному поведению (интерпретация: уничтожение должно осуществляться через конкретный тип). Вопрос Q-add18020b48f3131 (открытый)
Данное руководство было сгенерировано системой ИИ на основе спецификации AUTOSAR Adaptive R25-11.
except for the following deviations: 1. The function is noexcept 2. The function returns nullptr instead of (potentially) throwing a std::bad_alloc exception ≙ std::bad_alloc
As per corresponding usage in [mem.res.monotonic.buffer] except for the following deviations: 1. The function is noexcept 2. The function returns nullptr instead of (potentially) throwing a std::bad_alloc exception
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 601be17f5d68ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Использование
Защищённая функция-член do_allocate класса ara::core::MonotonicBufferResource служит для выделения областей памяти согласно [mem.res.monotonic.buffer][SWS_CORE_06569]. Она реализует чисто виртуальный интерфейс do_allocate базового класса ara::core::MemoryResource[SWS_CORE_06566]. В качестве интерпретации: синхронный вызов в силу видимости protected, вероятно, происходит преимущественно косвенно через открытые методы выделения памяти базового класса. Вопрос Q-21b2da19c0fd7f8f (открытый) Функция принимает запрашиваемый размер в байтах, а также требуемое выравнивание (alignment).
Обработка ошибок и безопасность исключений
В отличие от стандартного поведения C++, функция при ошибках выделения памяти не генерирует исключение std::bad_alloc, а возвращает вместо этого nullptr[SWS_CORE_06569]. Благодаря объявлению с noexcept метод специфицирован как исключебно-безопасный [SWS_CORE_06569]. Поэтому вызывающий код всегда должен проверять результат на nullptr для обнаружения нехватки памяти.
Параллелизм и взаимодействие
Метод специфицирован как непотокобезопасный [SWS_CORE_06569]. Если операции выделения памяти инициируются параллельно из нескольких потоков, синхронизация должна выполняться извне вызывающей стороной. Это соответствует поведению ara::core::UnsynchronizedPoolResource::do_allocate[SWS_CORE_00058], тогда как ara::core::SynchronizedPoolResource::do_allocate для параллельных вызовов спроектирован как потокобезопасный [SWS_CORE_00061].
Это указание по использованию было сгенерировано автоматически на основе спецификации AUTOSAR R25-11.
Руководство разработчика реализации в подготовке (сложность I1)
As per corresponding usage in [mem.res.monotonic.buffer] except for the following deviations: 1. The function is noexcept 2. If unsuccessful: errors will be silently ignored
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: e7d49ed79e7cПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Использование
Функция-член do_deallocate класса ara::core::MonotonicBufferResource служит для освобождения областей памяти согласно [SWS_CORE_06570]. Она определена в заголовочном файле #include "ara/core/memory_resource.h"[SWS_CORE_06570]. Функция принимает указатель p на освобождаемую область памяти, а также параметры bytes и alignment (оба типа std::size_t) и не возвращает значения (void) [SWS_CORE_06570]. Семантика следует определению в [mem.res.monotonic.buffer] со специфическими отличиями AUTOSAR [SWS_CORE_06570].
Обработка ошибок
Функция объявлена как noexcept и обеспечивает исключительную безопасность (exception safe) [SWS_CORE_06570]. Если при выполнении возникает ошибка, она молча игнорируется (errors will be silently ignored) [SWS_CORE_06570]. Возвращаемые значения и специфические коды ошибок для сообщений об ошибках отсутствуют.
Параллелизм и ограничения
Что касается параллелизма, do_deallocate специфицирована как непотокобезопасная (not thread-safe) [SWS_CORE_06570]. Одновременный вызов из нескольких потоков без внешней синхронизации недопустим. Метод имеет видимость protected и переопределяет чисто виртуальный интерфейс базового класса ara::core::MemoryResource[SWS_CORE_06567]. Интерпретация: вызовы обычно должны производиться через открытый интерфейс освобождения памяти базового класса. Вопрос Q-6916292acaa8993b (открытый)
Взаимодействие
В то время как базовый класс ara::core::MemoryResource предписывает метод освобождения памяти с закрытой видимостью [SWS_CORE_06567], MonotonicBufferResource и родственные классы ara::core::SynchronizedPoolResource[SWS_CORE_00041] и ara::core::UnsynchronizedPoolResource[SWS_CORE_00059] реализуют его защищённым (protected) с молчаливой обработкой ошибок. В отличие от синхронизированного пулового ресурса [SWS_CORE_00041], являющегося потокобезопасным, MonotonicBufferResource, как и ara::core::UnsynchronizedPoolResource[SWS_CORE_00059], требует исключения параллельных обращений.
Это указание по использованию было создано ИИ и основано на положениях спецификации AUTOSAR Adaptive R25-11.
Руководство разработчика реализации в подготовке (сложность I1)
As per corresponding usage in [mem.res.monotonic.buffer] except for the following deviations: 1. The function is noexcept
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: fc4ade44f9c3Происхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Метод со спецификатором protected do_is_equal класса ara::core::MonotonicBufferResource переопределяет чисто виртуальный интерфейс базового класса ara::core::MemoryResource согласно [SWS_CORE_06571]. Он синхронно сравнивает текущий экземпляр с переданным const MemoryResource &other на равенство в отношении семантики управления памятью.
Использование и семантика
Вызов обычно выполняется косвенно через открытый интерфейс MemoryResource. Согласно [SWS_CORE_06571] поведение ориентируется на применение в [mem.res.monotonic.buffer], однако имеет явное отличие, заключающееся в том, что функция объявлена как noexcept. Возвращаемым значением является bool, указывающее, взаимозаменяемы ли или идентичны оба ресурса.
Обработка ошибок и параллелизм
Безопасность исключений: функция специфицирована как exception safe и благодаря сигнатуре noexcept согласно [SWS_CORE_06571] не генерирует исключений. Специфические коды ошибок или сообщения DET/DEM отсутствуют.
Потокобезопасность: операция классифицирована как thread-safe ([SWS_CORE_06571]) и может выполняться параллельно.
Взаимодействие
Функция реализует виртуальный контракт из ara::core::MemoryResource ([SWS_CORE_06568]). Аналогичные реализации сравнения на равенство встречаются и в других ресурсах памяти, таких как ara::core::SynchronizedPoolResource ([SWS_CORE_00042]) и ara::core::UnsynchronizedPoolResource ([SWS_CORE_00060]).
Этот текст был сгенерирован ИИ на основе спецификации R25-11.
Руководство разработчика реализации в подготовке (сложность I1)
As per corresponding usage in [mem.res.monotonic.buffer] except for the following deviations: 1. The function is noexcept
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 082c843665ceПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Функция-член release() класса ara::core::MonotonicBufferResource ([SWS_CORE_06530]) служит для освобождения памяти, управляемой буферным ресурсом. Вызов выполняется синхронно, не принимает параметров и не возвращает значения (void).
Что касается обработки ошибок, функция объявлена как noexcept и специфицирована как исключебно-безопасная (exception safe) ([SWS_CORE_06530]). Специфические коды ошибок отсутствуют, и сообщения об ошибках в центральные диагностические службы или службы оповещения не отправляются.
Относительно параллелизма release() явно классифицирована как непотокобезопасная (not thread-safe) ([SWS_CORE_06530]). Конкурентный доступ к одному и тому же экземпляру без внешней синхронизации недопустим. Интерпретация: в силу семантики, основанной на [mem.res.monotonic.buffer], при вызове, вероятно, становятся недействительными все области памяти, ранее предоставленные через этот ресурс. Вопрос Q-bd46bd9971926d95 (открытый)
Во взаимодействии ресурсов памяти из #include "ara/core/memory_resource.h" данная функция отличается по поведению при параллельном доступе от ara::core::SynchronizedPoolResource::release(), являющейся потокобезопасной ([SWS_CORE_00037]), в то время как она ведёт себя аналогично ara::core::UnsynchronizedPoolResource::release(), которая также не является потокобезопасной ([SWS_CORE_00065]).
Этот текст был сгенерирован ИИ на основе требований спецификации AUTOSAR R25-11.
As per corresponding usage in [mem.res.monotonic.buffer] except for the following deviations: 1. The function is noexcept
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 34a11a1fee7aПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Функция-член upstream_resource() класса ara::core::MonotonicBufferResource синхронно возвращает указатель на вышестоящий ресурс памяти типа MemoryResource*[SWS_CORE_06531]. Вызов осуществляется через заголовочный файл #include "ara/core/memory_resource.h" и не принимает параметров [SWS_CORE_06531]. Интерпретация: возвращаемый ресурс памяти, вероятно, функционирует в качестве вышестоящего буфера, если внутреннего буфера экземпляра недостаточно для выделения памяти. Вопрос Q-e01e234e281bc4c6 (открытый)
Что касается обработки ошибок и безопасности исключений, метод объявлен как noexcept и полностью исключебно-безопасен (exception safe) [SWS_CORE_06531]. Специфические коды ошибок, объекты ошибок или диагностические сообщения, такие как DET или DEM, для этого чистого вызова геттера в спецификации не предусмотрены [SWS_CORE_06531].
Относительно параллелизма метод специфицирован как const, а также как потокобезопасный (thread-safe) [SWS_CORE_06531]. Благодаря этому указатель на вышестоящий ресурс (upstream resource) можно запрашивать из нескольких потоков параллельно без внешней синхронизации.
Функциональная семантика следует определению в [mem.res.monotonic.buffer], однако имеет нормативное отличие, заключающееся в том, что в стандарте AUTOSAR Adaptive функция явно определена как noexcept[SWS_CORE_06531]. Аналогичный шаблон интерфейса для предоставления вышестоящего ресурса используют также родственные классы ara::core::SynchronizedPoolResource[SWS_CORE_00038] и ara::core::UnsynchronizedPoolResource[SWS_CORE_00056].
Этот текст был создан ИИ на основе данных спецификации.
As per corresponding usage in [mem.res.monotonic.buffer] except for the following deviations: 1. The function is noexcept 2. The function is not virtual
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал