VC ++ 10 включает правило строгого алиасинга с / O1 и выше. Я использую тестовую программу (со значением счетчика 6) в главе «ПРЕИМУЩЕСТВА ДЛЯ СТРОГО ПРАВИЛА ПОВЕСТКИ ДНЯ» в здесь . И получите следующий код asm. Вы можете видеть, что загрузка b выполняется только один раз.
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
Но похоже, что нет способа включить предупреждение за нарушение этого правила.