ExpertiDict

C · Avançado · Inglês · Técnico

strict aliasing

/stɹɪkt ˈeɪ.li.əs.ɪŋ/substantivo

Regra segundo a qual um objeto só pode ser acessado por lvalues de tipo compatível ou por char. O compilador a usa para assumir que ponteiros de tipos diferentes não se sobrepõem.

Onde usar

Ler um float como int via cast de ponteiro viola a regra e dá comportamento indefinido sob -O2. A saída segura é memcpy ou uma union.

Em código

float f = 1.0f;
uint32_t bits;
memcpy(&bits, &f, sizeof bits); // seguro
// *(uint32_t *)&f violaria a regra

Exemplos

That pointer cast breaks strict aliasing.

Esse cast de ponteiro quebra o strict aliasing.

With -O2, strict aliasing lets the compiler reorder these loads.

Com -O2, o strict aliasing deixa o compilador reordenar essas leituras.

Cuidado

Desligar a regra com -fno-strict-aliasing só mascara o bug; o certo é corrigir o acesso, normalmente com memcpy.

Veja também

Todos os termos de C