Sirve como interfaz base para la asignación y liberación de memoria libres de excepciones.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: efd95fd8a941ProcedenciaPreguntas abiertas (2)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
Sirve como interfaz base para la asignación y liberación de memoria libres de excepciones.
La clase proporciona una interfaz base abstracta para recursos de memoria polimórficos, inspirada en la interfaz estándar de C++. A través del patrón Non-Virtual Interface, delega las solicitudes de asignación y liberación a clases de recursos derivadas [SWS_CORE_06503]. A diferencia del estándar de C++, todas las funciones de interfaz están declaradas como seguras frente a excepciones, por lo que los errores de memoria no se señalizan mediante excepciones, sino a través de la devolución de un puntero nulo [SWS_CORE_06566]. Además, las operaciones de asignación y liberación no están diseñadas por defecto para ser seguras para hilos (thread-safe).
Contexto
La clase ara::core::MemoryResource proporciona en la AUTOSAR Adaptive Platform (módulo core) una interfaz base abstracta para la gestión de memoria basada en el tipo estándar de C++ std::pmr::memory_resource. Sirve como fundamento común para estrategias de asignación intercambiables y desacopla las estructuras de datos llamantes de los mecanismos concretos de suministro de memoria. Como diferencia sustancial respecto al estándar ISO de C++, la especificación AUTOSAR prescinde por completo de excepciones dinámicas y formula estrictas garantías de noexcept para todas las operaciones [SWS_CORE_06501].
La arquitectura sigue el patrón Non-Virtual Interface (NVI): las funciones miembro públicas no virtuales definen la interfaz fija para los llamantes, mientras que el comportamiento real debe implementarse en clases derivadas mediante funciones miembro privadas puramente virtuales. Interpretación: Los recursos de memoria concretos derivan de ara::core::MemoryResource y sobrescriben las interfaces base privadas do_allocate[SWS_CORE_06566], do_deallocate[SWS_CORE_06567] y do_is_equal[SWS_CORE_06568] para proporcionar gestiones de búfer o de pool específicas de la aplicación. Pregunta Q-d09d47b0a8f6b822 (abierta)
Ciclo de vida
La instanciación de especializaciones se realiza a través del constructor por defecto sin parámetros, especificado como noexcept=default[SWS_CORE_06501]. Del mismo modo, están disponibles un constructor de copia noexcept [SWS_CORE_06502] y un operador de asignación por copia noexcept [SWS_CORE_06507]. De forma complementaria al estándar de C++, AUTOSAR define explícitamente un constructor de movimiento [SWS_CORE_06574] y un operador de asignación por movimiento [SWS_CORE_06575], ambos fijados como noexcept=default.
El ciclo de vida de las instancias polimórficas está protegido por un destructor virtual declarado como seguro frente a excepciones [SWS_CORE_06506]. En relación con la concurrencia, debe tenerse en cuenta que tanto el destructor como las funciones de asignación y liberación allocate[SWS_CORE_06503] y deallocate[SWS_CORE_06504] están especificados como no seguros para hilos (no thread-safe). Interpretación: Es de esperar que mecanismos de sincronización de nivel superior o subclases especializadas sean responsables de asignaciones y liberaciones seguras para hilos, ya que los métodos base están especificados como no seguros para hilos. Pregunta Q-adac4b6cf6e0db7c (abierta) En cambio, la comprobación de igualdad vía is_equal está diseñada explícitamente como segura para hilos [SWS_CORE_06505].
Ruta de uso
El flujo principal en la gestión de memoria consta de la solicitud, la comprobación de identidad opcional y la posterior liberación de bloques de memoria a través de la interfaz pública NVI:
Asignación de memoria: El llamante invoca allocate especificando el tamaño en bytes y la alineación opcional [SWS_CORE_06503]. El método delega internamente en la función privada puramente virtual do_allocate de la clase concreta [SWS_CORE_06566].
Comprobación de igualdad: Para determinar si dos recursos de memoria son equivalentes entre sí y si la memoria de uno puede ser liberada por el otro, el usuario invoca is_equal[SWS_CORE_06505], lo que delega en do_is_equal[SWS_CORE_06568].
Liberación de memoria: Una vez finalizado el uso, el bloque se devuelve a través de deallocate especificando el puntero, el tamaño en bytes y la alineación [SWS_CORE_06504], con lo cual se produce el reenvío interno a do_deallocate[SWS_CORE_06567].
Una característica central de la clase es la exclusión total de excepciones. Mientras que el estándar ISO de C++ prevé una excepción del tipo std::bad_alloc en caso de agotamiento, AUTOSAR se desvía deliberadamente de ello: si falla una asignación en allocate o do_allocate, la función devuelve obligatoriamente nullptr[SWS_CORE_06503], [SWS_CORE_06566]. Mediante el atributo [[nodiscard]] en allocate, se insta al llamante a recibir siempre el valor devuelto y a comprobar su validez antes de acceder.
Para las operaciones de liberación deallocate y do_deallocate, los eventuales errores al devolver la memoria se ignoran silenciosamente [SWS_CORE_06504], [SWS_CORE_06567]. No se lanzan excepciones ni se devuelven códigos de error, lo que facilita el cumplimiento de requisitos estrictos de tiempo real y seguridad en el contexto de la plataforma adaptativa.
Este texto ha sido curado por una IA y se basa exclusivamente en las especificaciones de 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
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 6735dc6d085fProcedencia
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
La función miembro allocate de la clase ara::core::MemoryResource sirve para asignar memoria lineal con un tamaño en bytes y una alineación predefinidos [SWS_CORE_06503]. Se basa en la interfaz estándar de C++ [mem.res], pero difiere significativamente en el tratamiento de excepciones [SWS_CORE_06503].
Uso y parámetros
La llamada se realiza de forma síncrona mediante los parámetros bytes (número de bytes solicitados) y el parámetro opcional alignment, que por defecto está establecido en alignof(std::max_align_t)[SWS_CORE_06503]. El valor de retorno cuenta con el atributo [[nodiscard]], por lo que el llamante debe evaluar obligatoriamente el puntero devuelto de tipo void*[SWS_CORE_06503].
Tratamiento de errores y seguridad frente a excepciones
A diferencia del comportamiento estándar, la función no lanza ninguna excepción de tipo std::bad_alloc en caso de error, sino que está declarada como noexcept y se considera segura frente a excepciones (exception safe) [SWS_CORE_06503]:
Éxito: devuelve un puntero válido a la región de memoria asignada conforme a [mem.res][SWS_CORE_06503].
Fallo: si la asignación de memoria falla, la función devuelve en su lugar nullptr[SWS_CORE_06503]. Por lo tanto, el llamante siempre debe comprobar explícitamente si el resultado es un puntero nulo.
Concurrencia e interacción
La función está especificada como no segura para subprocesos (not thread-safe) [SWS_CORE_06503]. Por consiguiente, las llamadas paralelas sobre la misma instancia de MemoryResource requieren sincronización externa por parte del llamante. Este patrón tolerante a fallos y sin excepciones se encuentra de forma coherente en otros componentes de memoria de AUTOSAR Adaptive: así, ara::core::PolymorphicAllocator::allocate utiliza el mismo enfoque sin excepciones [SWS_CORE_06547], y también la instancia especial NullMemoryResource señaliza el agotamiento de memoria devolviendo nullptr[SWS_CORE_06563].
Esta nota de uso se ha generado de forma automatizada sobre la base de la especificación R25-11 de AUTOSAR.
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
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: 65d739156bbeProcedencia
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
La función deallocate de la clase ara::core::MemoryResource sirve para liberar regiones de memoria conforme a [SWS_CORE_06504]. Su uso sigue en principio el comportamiento estándar de [mem.res], pero presenta desviaciones específicas. La llamada se realiza de forma síncrona a través de la signatura void deallocate(void *p, std::size_t bytes, std::size_t alignment=max_align) noexcept, pasando el puntero p al bloque que se va a liberar, el tamaño bytes y, opcionalmente, la alineación [SWS_CORE_06504].
En cuanto al comportamiento ante errores, la función está especificada como noexcept y segura frente a excepciones (exception safe) [SWS_CORE_06504]. Si la liberación falla, los errores se ignoran silenciosamente (errors will be silently ignored) [SWS_CORE_06504]. No se lanzan excepciones ni se emiten mensajes de error a través de DET o DEM.
Respecto a la concurrencia, la función está clasificada expresamente como no segura para subprocesos (not thread-safe) [SWS_CORE_06504]. Por tanto, los accesos simultáneos a la misma instancia de recurso deben ser sincronizados externamente por el llamante.
En interacción con el concepto de asignador, esta función se corresponde con la interfaz tipificada deallocate de la clase ara::core::PolymorphicAllocator de [SWS_CORE_06548], que presenta desviaciones similares respecto a noexcept y al tratamiento silencioso de errores.
Esta nota de uso fue creada automáticamente por un asistente de curación con IA y se basa exclusivamente en los datos de especificación de 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
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: fa83e476b05dProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
El método virtual puro do_allocate de la clase ara::core::MemoryResource sirve para la asignación de bloques de memoria con un tamaño en bytes y una alineación predefinidos [SWS_CORE_06566]. Como parámetros toma la cantidad de bytes (bytes) así como la alineación requerida (alignment). En caso de asignación correcta, devuelve de forma síncrona un puntero del tipo void * a la zona de memoria reservada [SWS_CORE_06566].
Con respecto al tratamiento de errores, la función se aparta deliberadamente del estándar de C++ habitual: está declarada como noexcept y, en caso de fallos, no lanza ninguna excepción std::bad_alloc, sino que devuelve nullptr en su lugar [SWS_CORE_06566]. Por lo tanto, quienes realizan la llamada siempre deben comprobar si el resultado de la asignación es un puntero nulo.
En lo que respecta a la concurrencia, el método está especificado como not thread-safe[SWS_CORE_06566]. Las llamadas paralelas a través de la misma instancia requieren una sincronización externa, a menos que la implementación derivada contemple su propia protección. Debido a la visibilidad privada, la invocación por parte de los usuarios típicamente debería realizarse de forma indirecta a través de la interfaz de nivel superior de la clase base. Pregunta Q-5cbdabf121ed4550 (abierta)
En la interacción de la gestión de memoria, el método constituye la contrapartida directa de do_deallocate, que se encarga de la liberación de la memoria asignada e ignora silenciosamente los errores [SWS_CORE_06567]. La función de comparación do_is_equal comprueba además si dos instancias de recursos son compatibles entre sí en lo relativo a asignación y liberación [SWS_CORE_06568].
Esta nota de uso se generó de forma automatizada sobre la base de la especificación.
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
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: fca1a9bccecbProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
La función miembro virtual pura do_deallocate de la clase ara::core::MemoryResource (declarada en ara/core/memory_resource.h) sirve, conforme a [SWS_CORE_06567], para liberar memoria previamente reservada. Recibe el puntero p a la zona de memoria, así como su tamaño bytes y la alineación requerida alignment. La semántica se corresponde en principio con el estándar de C++ [mem.res], pero presenta dos desviaciones determinantes específicas de Adaptive [SWS_CORE_06567].
En primer lugar, la función está declarada como noexcept y garantiza la seguridad frente a excepciones (exception safe) [SWS_CORE_06567]. En segundo lugar, se ignoran silenciosamente los posibles errores durante la liberación, de modo que las operaciones fallidas no deben generar mensajes de error ni interrumpir el flujo del programa [SWS_CORE_06567].
En lo relativo a la concurrencia, do_deallocate está especificado como not thread-safe y posee visibilidad private[SWS_CORE_06567]. Al tratarse de un detalle de implementación de un recurso de memoria polimórfico, debería ejecutarse de forma síncrona a través de la interfaz de llamada pública de nivel superior. Pregunta Q-3f97e122ee7fb281 (abierta) Las liberaciones concurrentes sobre el mismo recurso deben ser sincronizadas de forma autónoma por las clases derivadas en caso necesario.
En el módulo core, la función constituye la contrapartida de la asignación do_allocate[SWS_CORE_06566], la cual devuelve nullptr en lugar de una excepción en caso de error. La comparación con otros recursos se realiza a través del método do_is_equal[SWS_CORE_06568], que, a diferencia de la desasignación, está definido explícitamente como thread-safe.
Esta nota de uso se ha generado automáticamente sobre la base de la especificación de AUTOSAR R25-11.
GENERADO POR IAno revisadoModelo: gemini-3.8-flash-medium · Esfuerzo: medium · Temperatura: no controlable · Prompt: c0f1ba532a98ProcedenciaPreguntas abiertas (1)
traducido de la guía alemanagemini-3.8-flash-low · 2026-10-13 · Original en alemán
La función miembro virtual pura do_is_equal se declara en el encabezado #include "ara/core/memory_resource.h" en el espacio de nombres de ara::core::MemoryResource ([SWS_CORE_06568]). Sirve, según la especificación de C++ [mem.res], para la comparación síncrona del recurso de memoria actual con una referencia const MemoryResource &other transmitida en cuanto a su igualdad ([SWS_CORE_06568]). Dado que el método está definido con visibilidad privada (private), su invocación debería procesarse polimórficamente como detalle de implementación a través de la interfaz pública de la clase ara::core::MemoryResource ([SWS_CORE_06568]). Pregunta Q-cbe02f652b43d6ec (abierta)
En lo que respecta a la ejecución y la seguridad frente a errores, do_is_equal está declarado como exception safe, así como noexcept ([SWS_CORE_06568]). Por consiguiente, bajo ninguna circunstancia debe lanzar excepciones y señaliza el resultado directamente a través del valor de retorno booleano ([SWS_CORE_06568]). Además, el método está especificado como thread-safe, de modo que las implementaciones derivadas deben garantizar la seguridad para subprocesos incluso en comparaciones concurrentes ([SWS_CORE_06568]).
En interacción con los demás métodos virtuales de la gestión de memoria, do_is_equal completa el trío de puntos de adaptación de clases de recursos derivadas ([SWS_CORE_06568]). Mientras que la asignación de memoria do_allocate devuelve nullptr en caso de error ([SWS_CORE_06566]) y do_deallocate ignora silenciosamente los errores ([SWS_CORE_06567]), ambas funciones, a diferencia de do_is_equal, están designadas como no seguras para subprocesos (not thread-safe) ([SWS_CORE_06566], [SWS_CORE_06567]). Esto subraya el requisito especial para do_is_equal de proteger las comparaciones concurrentes de recursos ([SWS_CORE_06568]).
Este texto ha sido generado por una IA y sirve como indicación de uso sobre la base de la especificación AUTOSAR.
gemini-3.8-flash-low· 2026-10-13 · Original en alemán