Я компилирую очень маленькое приложение командной строки Win32 в режиме Release-Mode VS2010, при этом включена оптимизация скорости (не оптимизация памяти).
Это приложение предназначено для одной цели - выполнить одну предварительно определенную сложную математическую операцию, чтобы найти комплексное решение конкретной проблемы. Алгоритм полностью функциональный (подтвержден), и он компилируется и работает отлично в режиме Debug. Однако, когда я компилирую в Release-Mode (алгоритм достаточно велик, чтобы использовать оптимизацию), Link.exe работает бесконечно, а код никогда не заканчивает связывание. Он сидит при 100% использовании ЦП без изменений в использовании памяти (43,232 К).
Мое приложение содержит только два класса, оба из которых являются довольно короткими файлами кода. Однако алгоритм содержит 20 или около того вложенных циклов с встроенными вызовами функций изнутри каждого уровня. Является ли компоновщик попыткой запускать любой возможный путь через эти циклы? И если да, то почему у компоновщика Debug-Mode нет проблем?
Это крошечное приложение командной строки (2KB exe файл), и компиляция не должна занимать больше пары минут. Я дождался 30 минут, без изменений. Я подумываю о том, чтобы связать его в одночасье, но если он действительно пытается пропустить все возможные пути кода в алгоритме, он может в конечном итоге соединить десятилетия без суперкомпьютера.
Что мне нужно сделать, чтобы вытащить компоновщик из этого бесконечного цикла? Возможно ли, чтобы такой код создавал бесконечный цикл ссылок без получения ошибки компилятора до цикла ссылки?
EDIT:
Джерри Коффин указал, что я должен убить компоновщика и попытаться снова. Я забыл упомянуть об этом в исходном посте, но я прервал сборку, закрыл и снова открыл VS, и попытался построить несколько раз. Проблема последовательна, но я пока не изменил никаких вариантов компоновщика.
EDIT2:
Я также забыл упомянуть о том, что я удалил папки "Debug" и "Release" и перестроил с нуля. Те же результаты.
EDIT3:
Я только что подтвердил, что отключение функции inlining приводит к нормальной работе компоновщика. Проблема в том, что мне нужна функция вложения, так как это очень чувствительная к производительности операционная система с минимальным объемом памяти. Это приводит меня к тому, чтобы спросить, почему возникновение такой проблемы может возникнуть? "
EDIT4:
Выход, который отображается во время бесконечного цикла ссылок:
Link:
Generating code
EDIT5:
Я подтвердил, что размещение всего кода в одном файле CPP не решило проблему.