En lo que se refiere a C, que es un comportamiento indefinido. Mi siguiente sugerencia también es un comportamiento indefinido, pero evita todos los problemas basados en tipos y alias: use caracteres.
int a = get_value();
char const * const p = (const char * const)&a;
char * q = (char *)0x12345;
memcpy(q, p, sizeof(int));
O bien, puede acceder a los bytes q[i]
directamente. (Esta es la parte que es UB: el puntero q
no se obtuvo como la dirección de un objeto real o como resultado de una función de asignación. A veces esto está bien, por ejemplo, si está escribiendo un programa independiente que se ejecuta en modo real y accede al hardware de gráficos, puede escribir en la memoria de gráficos directamente en una dirección conocida y codificada).
'* (int *) 0x12AED567 = 2345' Pero es mejor que sepas lo que estás haciendo ... – Mysticial
mejor no lo intentes a menos que estés seguro de que la memoria no está en uso –
No solo la memoria debe utilizarse para ningún otro propósito , pero debe estar mapeado. En * nix al menos, si intentas escribir en una página no asignada, tu aplicación se segmenta y se bloquea. –