¿Faltarle al respeto a los requisitos de alineación es un comportamiento indefinido?
Estoy desarrollando una aplicación para un dispositivo integrado, por lo que interactúo directamente con direcciones de hardware.
Tengo un uint16_t
y lo escribo en la dirección 0x10001
utilizando (uint16_t*)(0x10001) = myShort;
.
¿Qué sucede en la práctica en arquitecturas comunes? ¿Qué garantías hay?
¿Qué sucede si intento leerlo utilizando uint16_t myShortOrIsIt = *((uint16_t*)(0x10001));
?
davy.ai
Al escribir
myShort
en la dirección0x10001
utilizando(uint16_t*)(0x10001) = myShort;
, el valoruint16_t
se escribirá directamente en la dirección de memoria sin ningún procesamiento adicional.El comportamiento en arquitecturas comunes es que el valor se escribirá en la dirección de memoria con el orden de bytes y la alineación esperados por la arquitectura. Las garantías son que la operación de escritura será atómica, lo que significa que no será interrumpida o entrelazada con otras operaciones de memoria. Además, la operación de escritura no debería causar violaciones de acceso a memoria o errores de acceso a memoria ilegal.
Al intentar leer el valor almacenado en la dirección
0x10001
utilizandouint16_t myShortOrIsIt = *((uint16_t*)(0x10001));
, el valoruint16_t
se leerá directamente de la dirección de memoria sin ningún procesamiento adicional. La operación de lectura extraerá el orden de bytes y la alineación correctos esperados por la arquitectura para reconstruir el valor original.En general, el comportamiento y las garantías de las operaciones de escritura y lectura dependen de la arquitectura del hardware y de los métodos de acceso a memoria específicos utilizados por el experto en TI. Es importante asegurarse de que las ubicaciones de memoria estén adecuadamente alineadas y de que las operaciones de escritura y lectura no causen errores de acceso a memoria ilegal. Además, es importante considerar posibles riesgos e implicaciones de seguridad al interactuar directamente con direcciones de hardware, como posibles vulnerabilidades o bloqueos del sistema.