Gestiona bloques de memoria en un búfer de crecimiento monótono con asignación sin excepciones y liberación colectiva.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 993d3b66f0fcProcedenciaPreguntas abiertas (2)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
Gestiona bloques de memoria en un búfer de crecimiento monótono con asignación sin excepciones y liberación colectiva.
La clase ara::core::MonotonicBufferResource proporciona un recurso de memoria especializado para asignaciones rápidas y monótonas a partir de un búfer de memoria fijo o a través de un recurso ascendente (upstream). La memoria solicitada se concede paso a paso y, en las desasignaciones individuales, no se libera de inmediato, sino que se restablece de forma agrupada mediante release() ([SWS_CORE_06530]). Todas las operaciones están declaradas completamente libres de excepciones, señalándose la falta de memoria mediante la devolución de nullptr en lugar de una excepción ([SWS_CORE_06569]). Las instancias no son copiables y requieren sincronización externa en caso de acceso concurrente desde múltiples subprocesos.
Contexto
La clase ara::core::MonotonicBufferResource es un recurso de memoria concreto dentro del módulo core de la plataforma AUTOSAR Adaptive y hereda de la clase base ara::core::MemoryResource. Adapta el concepto conocido del estándar C++ de std::pmr::monotonic_buffer_resource procedente de [mem.res.monotonic.buffer] para aplicaciones vehiculares deterministas y relevantes para la seguridad. La función principal de la clase consiste en atender solicitudes de asignación con un mínimo de sobrecarga de gestión a partir de un área de memoria continua, asignando memoria de forma monótona.
Como participantes en la interacción actúan, por un lado, componentes invocadores, asignadores polimórficos y contenedores que solicitan bloques de memoria en tiempo de ejecución. Por otro lado, la clase interactúa con un recurso de memoria upstream superior opcional (MemoryResource). Este recurso upstream puede transferirse a través de constructores como [SWS_CORE_06521] y consultarse mediante el método de acceso upstream_resource() ([SWS_CORE_06531]).
Ciclo de vida
La inicialización de ara::core::MonotonicBufferResource puede controlarse a través de varios constructores. Además de un constructor por defecto sin parámetros ([SWS_CORE_06524]), se dispone de sobrecargas que reciben un recurso upstream explícito ([SWS_CORE_06521]), definen un tamaño de búfer inicial ([SWS_CORE_06525], [SWS_CORE_06522]) o utilizan un área de memoria bruta proporcionada externamente (void* buffer, std::size_t buffer_size) como búfer inicial ([SWS_CORE_06526], [SWS_CORE_06523]).
En relación con las relaciones de propiedad, la clase está definida como estrictamente no copiable: el constructor de copia ([SWS_CORE_06527]) y el operador de asignación por copia ([SWS_CORE_06529]) están eliminados (=delete). A diferencia del estándar ISO-14882, la clase AUTOSAR implementa, sin embargo, semántica de movimiento explícita mediante el constructor de movimiento ([SWS_CORE_06576]) y el operador de asignación por movimiento ([SWS_CORE_06577]), definidos respectivamente como noexcept=default.
La destrucción tiene lugar a través del destructor ~MonotonicBufferResource() ([SWS_CORE_06528]). Una divergencia esencial de AUTOSAR respecto al estándar radica en que el destructor no está declarado como virtual. Mediante el método release() ([SWS_CORE_06530]) se puede restablecer toda la memoria asignada antes de que finalice la vida útil del objeto.
Un flujo de aplicación típico comprende la provisión, la asignación continuada y la liberación colectiva:
Instanciación: La aplicación crea una instancia, por ejemplo especificando un tamaño de búfer y un recurso upstream ([SWS_CORE_06522]) o un búfer fijo ([SWS_CORE_06526]).
Asignación: Las solicitudes de memoria se atienden a través del método protegido do_allocate(bytes, alignment) ([SWS_CORE_06569]). Si el búfer existente no basta, la instancia obtiene nuevo búfer del recurso upstream.
Desasignación: Las invocaciones de do_deallocate(p, bytes, alignment) ([SWS_CORE_06570]) no reducen el búfer de forma individual; el puntero interno de asignación avanza monótonamente.
Restablecimiento del búfer: Con release() ([SWS_CORE_06530]) se liberan de una vez todos los bloques de memoria obtenidos a través de upstream, y el búfer queda disponible para nuevos ciclos.
Comparación de recursos: A través de do_is_equal() ([SWS_CORE_06571]) se puede comprobar si dos recursos de memoria son idénticos.
La clase sigue directrices estrictas para sistemas embebidos libres de excepciones: todas las funciones miembro, constructores y operadores están declarados como noexcept y ofrecen total seguridad frente a excepciones.
En caso de error, el comportamiento difiere deliberadamente de la biblioteca estándar:
Asignación fallida: Si una solicitud en do_allocate() ([SWS_CORE_06569]) no puede atenderse, no se lanza ninguna excepción std::bad_alloc, sino que se devuelve un nullptr. Los invocadores deben comprobar obligatoriamente si el valor de retorno es nullptr.
Error en la desasignación: Si se produjera un error durante la liberación en do_deallocate() ([SWS_CORE_06570]), este se ignora silenciosamente según la especificación.
Destrucción a través de un puntero base: Dado que el destructor ([SWS_CORE_06528]) no es virtual, es probable que una destrucción a través de un puntero a la clase base MemoryResource provoque un comportamiento indefinido (interpretación: la destrucción debe tener lugar a través del tipo concreto). Pregunta Q-add18020b48f3131 (abierta)
Esta guía fue generada por un sistema de IA sobre la base de la especificación 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
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 601be17f5d68ProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
usar
La función miembro protegida do_allocate de la clase ara::core::MonotonicBufferResource sirve para asignar regiones de memoria conforme a [mem.res.monotonic.buffer][SWS_CORE_06569]. Implementa la interfaz puramente virtual do_allocate de la clase base ara::core::MemoryResource[SWS_CORE_06566]. Como interpretación, es probable que la llamada síncrona se realice principalmente de forma indirecta a través de los métodos públicos de asignación de la clase base debido a la visibilidad protected. Pregunta Q-21b2da19c0fd7f8f (abierta) La función toma el tamaño solicitado en bytes, así como la alineación deseada (alignment).
Tratamiento de errores y seguridad frente a excepciones
A diferencia del comportamiento estándar de C++, la función no lanza una excepción std::bad_alloc en caso de errores de asignación, sino que devuelve en su lugar un nullptr[SWS_CORE_06569]. Debido a la declaración con noexcept, el método está especificado como seguro frente a excepciones [SWS_CORE_06569]. Por lo tanto, los llamantes siempre deben comprobar si el resultado es nullptr para detectar memoria insuficiente.
Concurrencia e interacción
El método está especificado como no seguro para subprocesos [SWS_CORE_06569]. Si las asignaciones se inician de forma concurrente desde varios subprocesos, la sincronización debe realizarse externamente en el punto de llamada. Esto coincide con el comportamiento de ara::core::UnsynchronizedPoolResource::do_allocate[SWS_CORE_00058], mientras que ara::core::SynchronizedPoolResource::do_allocate está diseñado para ser seguro para subprocesos en llamadas concurrentes [SWS_CORE_00061].
Esta nota de uso fue generada de forma automatizada a partir de la especificación AUTOSAR R25-11.
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
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: e7d49ed79e7cProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
usar
La función miembro do_deallocate de la clase ara::core::MonotonicBufferResource sirve para desasignar regiones de memoria conforme a [SWS_CORE_06570]. Está definida a través del archivo de cabecera #include "ara/core/memory_resource.h"[SWS_CORE_06570]. La función toma un puntero p a la región de memoria que se va a liberar, así como los parámetros bytes y alignment (ambos de tipo std::size_t), y no devuelve ningún valor (void) [SWS_CORE_06570]. La semántica sigue lo establecido en [mem.res.monotonic.buffer] con desviaciones específicas de AUTOSAR [SWS_CORE_06570].
Manejo de errores
La función está declarada como noexcept y garantiza la seguridad frente a excepciones (exception safe) [SWS_CORE_06570]. Si se produce un error durante la ejecución, se ignora silenciosamente (errors will be silently ignored) [SWS_CORE_06570]. No existen valores de retorno ni códigos de error específicos para mensajes de error.
Concurrencia y restricciones
En cuanto a la concurrencia, do_deallocate está especificada como no segura para subprocesos (not thread-safe) [SWS_CORE_06570]. No está permitida una llamada simultánea desde varios subprocesos sin sincronización externa. El método tiene visibilidad protected y sobrescribe la interfaz puramente virtual de la clase base ara::core::MemoryResource[SWS_CORE_06567]. Interpretación: es probable que las llamadas se gestionen de forma habitual a través de la interfaz pública de desasignación de la clase base. Pregunta Q-6916292acaa8993b (abierta)
Interacción
Mientras que la clase base ara::core::MemoryResource prescribe el método de desasignación con visibilidad privada [SWS_CORE_06567], MonotonicBufferResource así como las clases relacionadas ara::core::SynchronizedPoolResource[SWS_CORE_00041] y ara::core::UnsynchronizedPoolResource[SWS_CORE_00059] lo implementan protegido (protected) con tratamiento silencioso de errores. A diferencia del recurso de grupo sincronizado [SWS_CORE_00041], que es seguro para subprocesos, MonotonicBufferResource, al igual que ara::core::UnsynchronizedPoolResource[SWS_CORE_00059], requiere excluir accesos paralelos.
Esta nota de uso fue creada por una IA y se basa en las disposiciones de la especificación AUTOSAR Adaptive R25-11.
As per corresponding usage in [mem.res.monotonic.buffer] except for the following deviations: 1. The function is noexcept
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: fc4ade44f9c3Procedencia
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
El método protegido (protected) do_is_equal de la clase ara::core::MonotonicBufferResource sobrescribe la interfaz puramente virtual de la clase base ara::core::MemoryResource conforme a [SWS_CORE_06571]. Compara síncronamente la instancia actual con un const MemoryResource &other pasado para determinar la igualdad respecto a la semántica de gestión de memoria.
Uso y semántica
La llamada se realiza típicamente de forma indirecta a través de la interfaz pública de MemoryResource. Conforme a [SWS_CORE_06571], el comportamiento se rige por el uso en [mem.res.monotonic.buffer], pero presenta la desviación explícita de que la función está declarada como noexcept. El valor de retorno es un bool que indica si ambos recursos son intercambiables o idénticos.
Tratamiento de errores y concurrencia
Seguridad frente a excepciones: la función está especificada como exception safe y no lanza excepciones debido a la signatura noexcept conforme a [SWS_CORE_06571]. No existen códigos de error específicos ni mensajes de DET/DEM.
Seguridad para subprocesos: la operación está clasificada como thread-safe ([SWS_CORE_06571]) y puede ejecutarse de forma concurrente.
Interacción
La función implementa el contrato virtual de ara::core::MemoryResource ([SWS_CORE_06568]). También se encuentran implementaciones similares de la comparación de igualdad en otros recursos de memoria como ara::core::SynchronizedPoolResource ([SWS_CORE_00042]) y ara::core::UnsynchronizedPoolResource ([SWS_CORE_00060]).
Este texto fue generado por una IA sobre la base de la especificación R25-11.
As per corresponding usage in [mem.res.monotonic.buffer] except for the following deviations: 1. The function is noexcept
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 082c843665ceProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
La función miembro release() de la clase ara::core::MonotonicBufferResource ([SWS_CORE_06530]) sirve para liberar la memoria gestionada por el recurso de búfer. La llamada se realiza de forma síncrona, no toma parámetros y no devuelve ningún valor (void).
En cuanto al tratamiento de errores, la función está declarada como noexcept y especificada como segura frente a excepciones (exception safe) ([SWS_CORE_06530]). No existen códigos de error específicos ni se envían mensajes de error a instancias centrales de diagnóstico o notificación.
Respecto a la concurrencia, release() está clasificada explícitamente como no segura para subprocesos (not thread-safe) ([SWS_CORE_06530]). No está permitido el acceso concurrente a la misma instancia sin sincronización externa. Interpretación: debido a la semántica inspirada en [mem.res.monotonic.buffer], es probable que con la llamada queden invalidadas todas las regiones de memoria proporcionadas previamente mediante este recurso. Pregunta Q-bd46bd9971926d95 (abierta)
En la interacción de los recursos de memoria de #include "ara/core/memory_resource.h", la función difiere en su comportamiento de concurrencia de ara::core::SynchronizedPoolResource::release(), que es segura para subprocesos ([SWS_CORE_00037]), mientras que se comporta de manera análoga a ara::core::UnsynchronizedPoolResource::release(), que tampoco es segura para subprocesos ([SWS_CORE_00065]).
Este texto fue generado por una IA sobre la base de los requisitos de especificación de AUTOSAR R25-11.
As per corresponding usage in [mem.res.monotonic.buffer] except for the following deviations: 1. The function is noexcept
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 34a11a1fee7aProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
La función miembro upstream_resource() de la clase ara::core::MonotonicBufferResource devuelve síncronamente un puntero al recurso de memoria ascendente de tipo MemoryResource*[SWS_CORE_06531]. La llamada se realiza a través de la cabecera #include "ara/core/memory_resource.h" y no toma parámetros [SWS_CORE_06531]. Interpretación: es probable que el recurso de memoria devuelto funcione como búfer ascendente en caso de que el búfer interno de la instancia no sea suficiente para las asignaciones. Pregunta Q-e01e234e281bc4c6 (abierta)
En cuanto al tratamiento de errores y la seguridad frente a excepciones, el método está declarado como noexcept y es completamente seguro frente a excepciones (exception safe) [SWS_CORE_06531]. En la especificación no están previstos códigos de error específicos, objetos de error ni mensajes de diagnóstico como DET o DEM para esta llamada puramente de consulta (getter) [SWS_CORE_06531].
Respecto a la concurrencia, el método está especificado como const y seguro para subprocesos (thread-safe) [SWS_CORE_06531]. De este modo, el puntero al recurso ascendente puede consultarse en paralelo desde varios subprocesos sin sincronización externa.
La semántica funcional sigue lo establecido en [mem.res.monotonic.buffer], pero presenta la desviación normativa de que la función está definida explícitamente como noexcept en el estándar AUTOSAR Adaptive [SWS_CORE_06531]. Las clases relacionadas ara::core::SynchronizedPoolResource[SWS_CORE_00038] y ara::core::UnsynchronizedPoolResource[SWS_CORE_00056] también emplean un patrón de interfaz análogo para proporcionar el recurso ascendente.
Este texto fue creado por una IA sobre la base de los datos de especificación.
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 · Original en alemán