Entendo o alias estrito de C / C ++ corretament
Eu liEste artigo sobre aliasing estrito de C / C ++. Eu acho que o mesmo se aplica ao C ++.
Pelo que entendi, o aliasing estrito é usado para reorganizar o código para otimização de desempenho. É por isso que dois ponteiros de tipos diferentes (e não relacionados no caso de C ++) não podem se referir ao mesmo local de memóri
Isso significa que os problemas podem ocorrer apenas se a memória for modificada? Além de possíveis problemascom alinhamento de memória.
Por exemplo, lidar com protocolo de rede ou desserialização. Eu tenho uma matriz de bytes, alocada dinamicamente e estrutura de pacotes está alinhada corretamente. Eu possoreinterpret_cast
na minha estrutura de pacotes?
char const* buf = ...; // dynamically allocated
unsigned int i = *reinterpret_cast<unsigned int*>(buf + shift); // [shift] satisfies alignment requirements