2011-12-18 6 views

Respuesta

4

Utilice -fstrict-aliasing para g++. También uso -Wstrict-aliasing=2 para ver advertencias relacionadas con posibles violaciones de reglas de aliasing estrictas.

3

Se habilitan automáticamente por -O2 porque deben usarse para realizar algunas de las optimizaciones. Definitivamente, combínelo con la advertencia (-Wall hace el truco) para asegurarse de que no está creando un código potencialmente defectuoso. De lo contrario, puede usar -fstrict-aliasing como se ve en otra respuesta para habilitarlos.

No estoy seguro acerca de VC++ 10 sin embargo.

1

VC++ 10 habilita la regla de alias estricto con/O1 y superior. Utilizo el programa de prueba (con valor de conteo 6) en el capítulo "BENEFICIOS PARA LA ESTRICTA REGLA DE ALIADO" de here. Y obtenga el siguiente código asm. Puedes ver que la carga de b se realiza solo una vez.

00A910AE movzx  edx,word ptr [edx+2] //Load of b 
00A910B2 xor   eax,eax 
00A910B4 xor   ecx,ecx 
00A910B6 add   dword ptr [esp+eax*4+34h],edx //Loop start 
00A910BA add   eax,1 
00A910BD adc   ecx,edi 
00A910BF jne   main+76h (0A910C6h) 
00A910C1 cmp   eax,6 
00A910C4 jb   main+66h (0A910B6h) //Loop end 

Pero parece que no hay una forma de habilitar la advertencia para infringir esta regla.

Cuestiones relacionadas