2012-12-11 2 views
2

나는 복잡한 수학 계산이 가능한 C 및 C++ 코드가 있습니다. 나는 intel C++를 사용한다. 최신 컴파일로 컴파일한다. 나는 optimizatons를 사용하고 응용 프로그램이 예상 답변을 제공하지 않습니다. 오랜 시간이 지나면 문제를 줄이면 EXCEPTION_FLT_STACK_CHECK 0xc0000092가되었습니다. 최적화없이 컴파일하면 프로그램이 예상대로 작동합니다.EXCEPTION_FLT_STACK_CHECK에 대한 이유를 발견했습니다.

Winxp64의 단일 스레드 코드입니다 (응용 프로그램은 32 비트 임).

MSVC 2010은 디버그 또는 릴리스 빌드에서도 동일한 결과를 제공합니다. (내 말은 Good = Expected results)

누군가 나를 볼 수있게 도와 줄 수 있습니까? 현재 필자는 컴파일러 버그를 의심하고있다. 필자가 작성한 asmsembly 코드가 없기 때문이다. 오직 컴파일러가 생성 한 코드 뿐이다. 어셈블러를 살펴보면 SSE/x87 혼합 코드입니다.

찾는 길을 찾고 있습니다. 나는 인텔 컴파일러의 시험 버전이므로 조사 할 시간이별로 없다.

나는/QFp-stack-check tommorow를 사용하여 내 코드에 문제가 있는지 확인할 것입니다.

* 업데이트 * 방금 ​​인텔 ® 컴파일러에서 버그를 발견했습니다. 함수는 st (0)의 값을 반환하지만 호출하는 함수는 st (0)을 제거하지 않습니다. 그렇게하면 스택 예외가 발생합니다. 해결 방법은 항상 필요한 것은 아니지만 반환 된 값을 사용하는 것입니다. 나는 내가 공유 할 수있는 코드로 그것을 재현하려고 노력할 것이다.

이 해결 방법을 실행 한 후 동일한 코드에서 msvc2010이 35 % 빨라졌습니다. - 그게 주요 결과 야.

mordy

+2

'EXCEPTION_FLT_STACK_CHECK'이 발생한 IP를 중심으로 코드를 게시하십시오. –

+0

나는 그것을 할 수 있을지 잘 모르겠다. 나는 방향과 가능한 원인을 찾고 있습니다. –

+1

우연히 borland C++ builder를 사용하고 있습니까? 그렇다면 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6563244 – crh225

답변

2
  • 업데이트 * 난 그냥 인텔 컴파일러의 버그를 발견했다. 함수는 st (0)의 값을 반환하지만 호출하는 함수는 st (0)을 제거하지 않습니다. 그렇게하면 스택 예외가 발생합니다. 해결 방법은 항상 필요한 것은 아니지만 반환 된 값을 사용하는 것입니다.
관련 문제