g ++에서 엄격한 앨리어싱 경고를 사용하는 올바른 방법은 무엇입니까? VC++ 10은 이러한 규칙을 구현합니까?g ++에서 엄격한 앨리어싱 경고 활성화
6
A
답변
4
g++
에 -fstrict-aliasing
을 사용하십시오. 또한 -Wstrict-aliasing=2
을 사용하여 엄격한 앨리어싱 규칙 위반 가능성과 관련된 경고를 확인합니다.
3
일부 최적화 작업을 수행 할 때 사용하기 때문에 -O2
에 의해 자동으로 활성화됩니다. 분명히 경고 메시지 (-Wall
)를 조합하여 잠재적으로 버그가있는 코드를 작성하지 않도록하십시오. 그렇지 않은 경우 -fstrict-aliasing
을 다른 대답과 같이 사용하여 사용할 수 있습니다.
그러나 VC++ 10에 대해서는 확실하지 않습니다.
1
VC++ 10은/O1 이상으로 엄격한 별칭 지정 규칙을 사용합니다. 나는 '엄청난 앨리어싱 규칙에 따른 이점'장의 테스트 프로그램 (카운트 값 6)을 here으로 사용합니다. 그리고 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
그러나이 규칙을 위반하는 경고가 표시되지 않는 것처럼 보입니다.
규칙은 항상 "사용 가능"입니다. 당신이 경고를 해독 할 때 알려주는 경고 만 선택 사항입니다. –