Служит базовым интерфейсом для безысключительного выделения и освобождения памяти.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: efd95fd8a941ПроисхождениеОткрытые вопросы (2)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Служит базовым интерфейсом для безысключительного выделения и освобождения памяти.
Класс предоставляет абстрактный базовый интерфейс для полиморфных ресурсов памяти, созданный по образцу стандартного интерфейса C++. С помощью шаблона проектирования Non-Virtual Interface он делегирует запросы на выделение и освобождение производным классам ресурсов [SWS_CORE_06503]. В отличие от стандарта C++, все интерфейсные функции объявлены безысключительными, поэтому ошибки памяти сигнализируются не через исключение, а посредством возврата нулевого указателя [SWS_CORE_06566]. Кроме того, операции выделения и освобождения по умолчанию не являются потокобезопасными.
Контекст
Класс ara::core::MemoryResource в AUTOSAR Adaptive Platform (модуль core) предоставляет абстрактный базовый интерфейс для управления памятью, основанный на стандартном типе C++ std::pmr::memory_resource. Он служит общим фундаментом для взаимозаменяемых стратегий выделения и отвязывает вызывающие структуры данных от конкретных механизмов предоставления памяти. В качестве существенного отличия от стандарта ISO C++ спецификация AUTOSAR полностью отказывается от динамических исключений и формулирует для всех операций строгие гарантии noexcept[SWS_CORE_06501].
Архитектура следует шаблону Non-Virtual Interface (NVI): открытые невиртуальные функции-члены определяют фиксированный интерфейс для вызывающих сторон, тогда как фактическое поведение в производных классах должно реализовываться через закрытые чисто виртуальные функции-члены. Интерпретация: конкретные ресурсы памяти наследуются от ara::core::MemoryResource и переопределяют закрытые базовые интерфейсы do_allocate[SWS_CORE_06566], do_deallocate[SWS_CORE_06567], а также do_is_equal[SWS_CORE_06568], обеспечивая специализированное для приложения управление буферами или пулами. Вопрос Q-d09d47b0a8f6b822 (открытый)
Жизненный цикл
Инстанцирование специализаций осуществляется через конструктор по умолчанию без параметров, который специфицирован как noexcept=default[SWS_CORE_06501]. Также доступны конструктор копирования noexcept [SWS_CORE_06502] и оператор присваивания копированием noexcept [SWS_CORE_06507]. В дополнение к стандарту C++ AUTOSAR явно определяет конструктор перемещения [SWS_CORE_06574] и оператор присваивания перемещением [SWS_CORE_06575], оба из которых заданы как noexcept=default.
Жизненный цикл полиморфных экземпляров защищается виртуальным деструктором, который объявлен безысключительным [SWS_CORE_06506]. В отношении параллелизма следует учитывать, что как деструктор, так и функции выделения и освобождения allocate[SWS_CORE_06503] и deallocate[SWS_CORE_06504] специфицированы как непотокобезопасные. Интерпретация: за потокобезопасные выделения и освобождения, по-видимому, отвечают вышестоящие механизмы синхронизации или специализированные подклассы, так как базовые методы специфицированы как непотокобезопасные. Вопрос Q-adac4b6cf6e0db7c (открытый) Проверка на равенство через is_equal, напротив, явно спроектирована потокобезопасной [SWS_CORE_06505].
Путь использования
Основной процесс управления памятью состоит из запроса, опциональной проверки идентичности и последующего освобождения блоков памяти через открытый интерфейс NVI:
Выделение памяти: вызывающая сторона вызывает allocate с указанием размера в байтах и опционального выравнивания [SWS_CORE_06503]. Метод внутри делегирует вызов закрытой чисто виртуальной функции do_allocate конкретного класса [SWS_CORE_06566].
Проверка на равенство: чтобы определить, эквивалентны ли два ресурса памяти друг другу и может ли память одного освобождаться другим, пользователь вызывает is_equal[SWS_CORE_06505], что делегирует выполнение do_is_equal[SWS_CORE_06568].
Освобождение памяти: после завершения использования блок возвращается через deallocate с указанием указателя, размера в байтах и выравнивания [SWS_CORE_06504], в результате чего происходит внутренняя переадресация в do_deallocate[SWS_CORE_06567].
Центральной особенностью класса является полное исключение исключений. В то время как стандарт ISO C++ на случай исчерпания памяти предусматривает исключение типа std::bad_alloc, AUTOSAR целенаправленно отступает от этого: если выделение памяти в allocate или do_allocate завершается неудачей, функция обязательно возвращает nullptr[SWS_CORE_06503], [SWS_CORE_06566]. С помощью атрибута [[nodiscard]] у allocate вызывающая сторона побуждается всегда принимать возвращаемое значение и проверять его корректность перед обращением.
Для операций освобождения deallocate и do_deallocate действует правило, согласно которому любые ошибки при возврате памяти неявно игнорируются [SWS_CORE_06504], [SWS_CORE_06567]. Никаких исключений не выбрасывается и кодов ошибок не возвращается, что облегчает соблюдение жестких требований реального времени и безопасности в контексте адаптивной платформы.
Этот текст подготовлен ИИ и основан исключительно на спецификациях AUTOSAR Adaptive Platform 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
in [15] 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] 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 · Температура: не регулируется · Промпт: 6735dc6d085fПроисхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Функция-член allocate класса ara::core::MemoryResource служит для выделения непрерывной памяти заданного размера в байтах и выравнивания [SWS_CORE_06503]. Она ориентируется на стандартный интерфейс C++ [mem.res], однако существенно отличается в части обработки исключений [SWS_CORE_06503].
Использование и параметры
Вызов выполняется синхронно с передачей параметров bytes (количество запрашиваемых байтов) и опционального alignment, который по умолчанию имеет значение alignof(std::max_align_t)[SWS_CORE_06503]. Возвращаемое значение снабжено атрибутом [[nodiscard]], поэтому возвращаемый указатель типа void* обязательно должен быть обработан вызывающей стороной [SWS_CORE_06503].
Обработка ошибок и безопасность исключений
В отличие от стандартного поведения, функция в случае ошибки не генерирует исключение типа std::bad_alloc, а объявлена как noexcept и считается исключебно-безопасной (exception safe) [SWS_CORE_06503]:
Успех: возвращает действительный указатель на выделенную область памяти согласно [mem.res][SWS_CORE_06503].
Сбой: если выделение памяти завершается неудачей, функция возвращает вместо этого nullptr[SWS_CORE_06503]. Поэтому вызывающая сторона всегда должна явно проверять результат на нулевой указатель.
Параллелизм и взаимодействие
Функция специфицирована как непотокобезопасная (not thread-safe) [SWS_CORE_06503]. Соответственно, параллельные вызовы для одного и того же экземпляра MemoryResource требуют внешней синхронизации со стороны вызывающего кода. Этот отказоустойчивый паттерн без исключений последовательно используется и в других компонентах памяти AUTOSAR Adaptive: так, ara::core::PolymorphicAllocator::allocate использует тот же подход без исключений [SWS_CORE_06547], а специализированный экземпляр NullMemoryResource также сигнализирует об исчерпании памяти возвратом nullptr[SWS_CORE_06563].
Это указание по использованию было сгенерировано автоматически на основе спецификации AUTOSAR R25-11.
As per corresponding usage in [mem.res] except for the following deviations: 1. The function is noexcept 2. If unsuccessful: errors will be silently ignored
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: 65d739156bbeПроисхождение
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Функция deallocate класса ara::core::MemoryResource служит для освобождения областей памяти согласно [SWS_CORE_06504]. Использование в целом следует стандартному поведению из [mem.res], однако имеет специфические отличия. Вызов выполняется синхронно через сигнатуру void deallocate(void *p, std::size_t bytes, std::size_t alignment=max_align) noexcept, при этом передаются указатель p на освобождаемый блок, размер bytes, а также опционально выравнивание [SWS_CORE_06504].
Что касается поведения при ошибках, функция специфицирована как noexcept и исключебно-безопасная (exception safe) [SWS_CORE_06504]. Если освобождение завершается неудачей, ошибки молча игнорируются (errors will be silently ignored) [SWS_CORE_06504]. Исключения не генерируются, и сообщения об ошибках через DET или DEM не выдаются.
Относительно параллелизма функция явно классифицирована как непотокобезопасная (not thread-safe) [SWS_CORE_06504]. Поэтому одновременный доступ к одному и тому же экземпляру ресурса должен синхронизироваться вызывающей стороной извне.
Во взаимодействии с концепцией аллокатора эта функция соответствует типизированному интерфейсу deallocate класса ara::core::PolymorphicAllocator из [SWS_CORE_06548], который демонстрирует аналогичные отклонения в отношении noexcept и молчаливой обработки ошибок.
Это указание по использованию было создано автоматически ИИ-ассистентом курации и основано исключительно на данных спецификации AUTOSAR R25-11.
As per corresponding usage in [mem.res] in [15] except for the following deviations: 1. The function is noexcept 2. The function returns nullptr instead of (potentially) throwing a std::bad_alloc exception
Literaturverzeichnis SWS Core: [15] ISO/IEC 14882:2020, Programming languages – C++ – www.iso.org
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: fa83e476b05dПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Чисто виртуальный метод do_allocate класса ara::core::MemoryResource служит для выделения блоков памяти заданного размера в байтах и выравнивания [SWS_CORE_06566]. В качестве параметров он принимает количество байтов (bytes) и требуемое выравнивание (alignment). При успешном выделении он синхронно возвращает указатель типа void * на выделенную область памяти [SWS_CORE_06566].
В отношении обработки ошибок функция целенаправленно отклоняется от обычного стандарта C++: она объявлена как noexcept и при сбоях не выбрасывает исключение std::bad_alloc, а вместо этого возвращает nullptr[SWS_CORE_06566]. Поэтому вызывающие компоненты должны всегда проверять результат выделения памяти на нулевой указатель.
Что касается параллелизма, метод специфицирован как not thread-safe[SWS_CORE_06566]. Параллельные вызовы через один и тот же экземпляр требуют внешней синхронизации, если производная реализация не предусматривает собственной защиты. Ввиду закрытой видимости вызов пользователями, вероятно, обычно выполняется косвенно через вышестоящий интерфейс базового класса. Вопрос Q-5cbdabf121ed4550 (открытый)
Во взаимодействии средств управления памятью метод является прямым аналогом do_deallocate, отвечающего за освобождение выделенной памяти и не выдающего ошибок [SWS_CORE_06567]. Функция сравнения do_is_equal дополнительно проверяет, совместимы ли два экземпляра ресурсов друг с другом в отношении выделения и освобождения памяти [SWS_CORE_06568].
Это указание по использованию было сгенерировано автоматически на основе спецификации.
As per corresponding usage in [mem.res] except for the following deviations: 1. The function is noexcept 2. If unsuccessful: errors will be silently ignored
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: fca1a9bccecbПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Чисто виртуальная функция-член do_deallocate класса ara::core::MemoryResource (объявленная в ara/core/memory_resource.h) служит согласно [SWS_CORE_06567] для освобождения ранее выделенной памяти. Она принимает указатель p на область памяти, а также её размер bytes и требуемое выравнивание alignment. Семантика в целом соответствует стандарту C++ [mem.res], однако имеет два существенных специфических для Adaptive отличия [SWS_CORE_06567].
Во-первых, функция объявлена как noexcept и гарантирует безопасность относительно исключений (exception safe) [SWS_CORE_06567]. Во-вторых, любые ошибки во время освобождения игнорируются без выдачи сообщений, так что неудачные операции не должны ни вызывать сообщений об ошибках, ни прерывать поток выполнения программы [SWS_CORE_06567].
Что касается параллелизма, do_deallocate специфицирована как not thread-safe и имеет видимость private[SWS_CORE_06567]. Являясь деталью реализации полиморфного ресурса памяти, она, вероятно, выполняется синхронно через вышестоящий открытый интерфейс вызова. Вопрос Q-3f97e122ee7fb281 (открытый) Конкурирующие операции освобождения на одном и том же ресурсе при необходимости должны синхронизироваться производными классами самостоятельно.
В модуле core функция представляет собой аналог операции выделения памяти do_allocate[SWS_CORE_06566], которая в случае ошибки возвращает nullptr вместо исключения. Сравнение с другими ресурсами осуществляется через метод do_is_equal[SWS_CORE_06568], который, в отличие от освобождения памяти, явно определён как thread-safe.
Это указание по использованию было автоматически сгенерировано на основе спецификации AUTOSAR R25-11.
СОЗДАНО ИИне провереноМодель: gemini-3.8-flash-medium · Усилие: medium · Температура: не регулируется · Промпт: c0f1ba532a98ПроисхождениеОткрытые вопросы (1)
переведено с немецкого руководстваgemini-3.8-flash-low · 2026-10-13 · Немецкий оригинал
Чисто виртуальная функция-член do_is_equal объявляется в заголовочном файле #include "ara/core/memory_resource.h" в пространстве имён ara::core::MemoryResource ([SWS_CORE_06568]). Согласно спецификации C++ [mem.res], она служит для синхронного сравнения текущего ресурса памяти с переданной ссылкой const MemoryResource &other на равенство ([SWS_CORE_06568]). Поскольку метод определён с закрытой видимостью (private), его вызов как детали реализации, вероятно, осуществляется полиморфно через открытый интерфейс класса ara::core::MemoryResource ([SWS_CORE_06568]). Вопрос Q-cbe02f652b43d6ec (открытый)
В отношении выполнения и безопасности относительно сбоев do_is_equal объявлена как exception safe, а также noexcept ([SWS_CORE_06568]). Соответственно, она ни при каких обстоятельствах не должна выбрасывать исключений и сообщает результат непосредственно через булево возвращаемое значение ([SWS_CORE_06568]). Кроме того, метод специфицирован как thread-safe, так что производные реализации должны обеспечивать потокобезопасность даже при параллельных сравнениях ([SWS_CORE_06568]).
Во взаимодействии с остальными виртуальными методами управления памятью do_is_equal завершает трио точек кастомизации производных классов ресурсов ([SWS_CORE_06568]). В то время как выделение памяти do_allocate в случае ошибки возвращает nullptr ([SWS_CORE_06566]), а do_deallocate игнорирует ошибки без выдачи сообщений ([SWS_CORE_06567]), обе функции, в отличие от do_is_equal, указаны как непотокобезопасные (not thread-safe) ([SWS_CORE_06566], [SWS_CORE_06567]). Это подчёркивает особое требование к do_is_equal — защищать параллельные сравнения ресурсов ([SWS_CORE_06568]).
Этот текст был сгенерирован ИИ и служит указанием по использованию на основе спецификации AUTOSAR.
gemini-3.8-flash-low· 2026-10-13 · Немецкий оригинал