2012-04-28 5 views
0

로컬이 아닌 점프 (setjmp, longjmp)를 사용하고 있습니다. 나는 그것이 공연에 문제가 될 수 있는지 알고 싶다. setjmp은 모든 스택 또는 일부 포인터를 저장합니까?비 로컬 점프에 성능 문제가 있습니까?

감사합니다.

+4

성능 문제는 무엇입니까? –

+0

예를 들어 goto와 비교합니다. 나는 그것이 두 가지 다른 점이라는 것을 알고 있지만 ... – md5

답변

1

옌스 (Jens)와 마찬가지로 setjmp은 사용하기로되어있는 것이 아니기 때문에 눈에 띄는 병목 현상이 생긴다면 재 설계하십시오.

질문 :
이것은 아마도 프로그램을 실행중인 아키텍처와 코드가 컴파일러에서 수행하는 작업에 따라 달라집니다. ARM에서 goto은 아마도 매우 빠른 단일 분기 명령어로 변환됩니다. 반면에 setjmplongjmp은 점프 후 실행을 다시 시작하기 위해 모든 레지스터를 저장하고 복원해야합니다. NEON을 지원하는 ARMv7-a에서는 약 16 개의 32 비트 레지스터와 최대 16 개의 128 비트 레지스터를 저장해야합니다.이 레지스터는 간단한 분기와 비교할 때 약간의 추가 작업이 필요합니다.

x86에서 더 적은 작업이 필요한지 전혀 알지 못하지만, goto도 많이 저렴합니다.

2

setjmplongjmp이 호출 될 때 프로그램이 실행을 계속하기에 충분한 정보를 저장해야합니다. 이것은 일반적으로 계산에 영향을 줄 수있는 다른 CPU 레지스터의 현재 값과 함께 현재 스택 포인터로 구성됩니다.

"성능 문제"가 발생하는지 여부에 대해서는 언급 할 수 없습니다. 비교 대상을 모르겠다.

2

빠른 대답은 다음과 같습니다. setjmp이 프로그램에서 눈에 띄는 병목 현상이되는 경우 프로그램 디자인에 정밀 검사가 필요하다고 말하는 경향이 있습니다.

관련 문제