Причини
При створенні програми за допомогою Microsoft Visual C++-2013, програма аварійно завершує роботу, і з'являється "Неприпустима інструкція" виняток. Це відбувається, тому, що деякі функції з рухомою комою математика на виконання Visual C++ 2013 року x64 C (CRT) не належним чином перевіряти функції, а потім їх використання певних AVX та FMA3 інструкції будуть доступні. Інструкції не доступні для використання, викликах функцій, ці спричинити неприпустима інструкція винятки (0xc000001d). Такі функції, містять журналу, log10 і pow та інші.
Ця проблема є відбуваються у таких випадках:
-
На старої версії операційної системи Windows, які не підтримують AVX стан збереження (наприклад, Windows Vista), якщо він використовується на комп'ютері, який підтримує набір інструкцій AVX
-
Якщо AVX стану збереження явно вимкнуто в конфігурації завантаження операційної системи
-
У середовищі попередньої інсталяції Windows (Windows PE)
Примітка. AVX стану збереження не підтримує Windows PE.
Як повідомляють, ця проблема з Microsoft Connect:
x64 log() функції, використовує vpsrlq інструкцій AVX, незалежно від операційної системи (так, вона аварійно завершує роботу у Vista x64)
Visual Studio 2013 RTM: C++ x64 з кодом помилки створення AVX2 інструкції
Причина
Ця проблема виникає в тому, що виконання Visual C++ 2013 року x64 C не перевірити, чи операційна система підтримує, що AVX стану збереження, перш ніж вона намагається виконати AVX або FMA3 інструкцій.
Вирішення
Всі задіяні C++ двійкові файли, створені за допомогою Visual C++-2013, використання бібліотеки DLL C Runtime (msvcr120.dll), інсталюйте на оновлені Microsoft 2013 вторинного розповсюдження Visual C++-12.0.40660.0 або пізнішої версії.
Якщо ваш впливу двійкових файлів C++ статично посилання на Visual C++ 2013 виконання C, необхідно оновити вашу копію Visual Studio-2013 інсталяція 3174417 виправлення та відновлення redeploying такі файли.
Примітка. Ця проблема не впливає на старіші версії Visual c + + C Runtime (Visual C++-2012 і попередні версії). Виправлено проблему до випуску універсальний CRT, який використовується в Visual C++ 2015 р.
Центр завантажень Microsoft
Щоб оновити статично Visual C++ 2013 C Runtime, 3174417 виправлення випущено як тільки для завантаження оновлення і не розповсюджується за допомогою служби Windows Update. Вона доступна на сайті центру завантажень Microsoft:
Завантажити пакет оновлень.
Оновлення динамічно пов'язаних Visual C++ 2013 C Runtime DLL, оновлена вторинного розповсюдження доступна. Щоб отримати додаткові відомості див. таку статтю бази знань Майкрософт:
3179560 поновлення для Visual C++-2013 і завантажити пакет вторинного розповсюдження Visual C++
Виправлення помилок
Щоб вирішити цю проблему, вимкніть FMA3, у бібліотеці математичних символів, якщо ви схильні до цієї проблеми. Можна надсилати запит, чи система підтримує AVX інструкції, зателефонувавши GetEnabledXStateFeatures та вимкнення AVX, у полі CRT, явно, зателефонувавши за номером _set_FMA3_enable(0).
Щоб отримати додаткові відомості див. Робота з XState контекстіна сайті MSDN.
Функції- _set_FMA3_enable(0) оголошена в < Math. h >, і вона доступна лише тоді, коли ви створити для x64. (Ця проблема впливає лише на x64 бібліотеки.) Це призводить до бібліотеки математичних символів до використання non-FMA3 впровадження.