gcc에서 특정 코드 부분을 최적화 시키지 않게 하려면
글쓴이: rndrmagkqslek. / 작성시간: 목, 2006/02/09 - 6:46오후
다음과 같은 코드가 있을때
unsigned int * var; *( (unsigned int*)0xFEC00000) = 0x10; *var = *( (unsigned int*)0xFEC00010);
gcc 에서 최적화 옵션을 주면, 디어셈블링 해보면
*var = *( (unsigned int*)0xFEC00010);
부분이 먼저 들어가고 그것에 이어서
*( (unsigned int*)0xFEC00000) = 0x10;
부분을 실행하게 됩니다.
그런데 위 코드는 0xFEC0000 부분이 셀렉터 역할을 하기 때문에
0xFEC00010 값을 얻어오기 전에 먼저 0xFEC0000에 값을 넣어 주어야 하는데요, 컴파일러가 최적화를 해버려서 순서가 바뀌어 버리네요.
물론 인라인 어셈으로 처리하면 되지만, 최적화 옵션 주고 인라인 어셈 안쓰고, 혹시 위 코드 부분만 최적화 되지 않게 하는 방법이 있을까요?
Forums:
volatile 키워드를 '잘' 써보십시오.*( (unsigned
volatile 키워드를 '잘' 써보십시오.
*( (unsigned int * volatile)0xFEC00000) = 0x10;
*(unsigned int * volatile)var = *( (unsigned int * volatile)0xFEC00010);
위에처럼 하는게 맞는지는 잘 모르겠습니다. 워낙에 쓸일이 없는 키워드라...
이렇게 해보시죠.[code:1]unsigned int * var;
이렇게 해보시죠.
아무리 최적화 해도 어셈 코드보다는 많이 길어지네요. volatile 붙
아무리 최적화 해도 어셈 코드보다는 많이 길어지네요. volatile 붙이니...
아무튼 두분 답변 감사합니다. 덕분에 해결 됐네요.. ^^
댓글 달기