У меня есть ошибка в этом условии:
while(CurrentObserverPathPointDisplacement > lengthToNextPoint && CurrentObserverPathPointIndex < (PathSize - 1) )
{
CurrentObserverPathPointIndex = CurrentObserverPathPointIndex + 1;
CurrentObserverPathPointDisplacement -= lengthToNextPoint;
lengthToNextPoint = (CurrentObserverPath->pathPoints[min((PathSize - 1),CurrentObserverPathPointIndex + 1)] - CurrentObserverPath->pathPoints[CurrentObserverPathPointIndex]).length();
}
Кажется, что он застрял в бесконечном цикле в режиме Release. Прекрасно работает в режиме отладки или, что еще интереснее, когда я помещаю отладочную печать в последнюю строку
OutputInDebug("Here");
Вот сгенерированная сборка для самого условия:
while(CurrentObserverPathPointDisplacement > lengthToNextPoint && CurrentObserverPathPointIndex < (PathSize - 1) )
00F074CF fcom qword ptr [dist]
00F074D2 fnstsw ax
00F074D4 test ah,5
00F074D7 jp ModelViewData::moveCameraAndCenterOnXYPlaneForwardBackward+27Eh (0F0753Eh)
00F074D9 mov eax,dword ptr [dontRotate]
00F074DC cmp eax,ebx
00F074DE jge ModelViewData::moveCameraAndCenterOnXYPlaneForwardBackward+27Eh (0F0753Eh)
{
Вы можете видеть, что для второго условия, похоже, что значение dontRotate, параметр функции типа bool, перемещается в eax, а затем сравнивается с ним, однако dontRotate не используется нигде рядом с этим битом кода.
Я понимаю, что это может быть немного мало данных, но лично это кажется очевидной ошибкой компилятора. Но, к сожалению, я не уверен, как отогнать это до самодостаточной проблемы, чтобы на самом деле создать отчет об ошибке.
Edit:
Не фактические замедления, а типы:
double CurrentObserverPathPointDisplacement;
double lengthToNextPoint;
int CurrentObserverPathPointIndex;
int PathSize;
vector<vector3<double>> CurrentObserverPath::pathPoints;
Редактировать2:
Как только я добавляю оператор печати отладки до конца времени, генерируется сборка, которая больше не выражает ошибку:
while(CurrentObserverPathPointDisplacement > lengthToNextPoint && CurrentObserverPathPointIndex < (PathSize - 1) )
00B1751E fcom qword ptr [esi+208h]
00B17524 fnstsw ax
00B17526 test ah,5
00B17529 jp ModelViewData::moveCameraAndCenterOnXYPlaneForwardBackward+2D6h (0B175A6h)
00B1752B mov eax,dword ptr [esi+200h]
00B17531 cmp eax,ebx
00B17533 jge ModelViewData::moveCameraAndCenterOnXYPlaneForwardBackward+2D6h (0B175A6h)
{