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