Przejdź do głównej zawartości
Pomoc techniczna
Zaloguj się przy użyciu konta Microsoft
Zaloguj się lub utwórz konto.
Witaj,
Wybierz inne konto.
Masz wiele kont
Wybierz konto, za pomocą którego chcesz się zalogować.

Objawy

Gdy podczas tworzenia programu za pomocą programu Microsoft Visual C++ 2013 awarii programu i otrzymujesz wyjątek "Niedozwolonej instrukcji". Dzieje się tak, ponieważ niektóre funkcje biblioteki matematyczne na liczbach zmiennoprzecinkowych w programie Visual C++ 2013 x64 C Runtime (CRT) prawidłowo sprawdza, czy określone instrukcje AVX i FMA3 są dostępne, zanim spróbujesz użyć ich funkcje. Jeśli instrukcje nie są dostępne do użytku, wywołania tych funkcji powoduje wyjątek niedozwolonej instrukcji (0xc000001d). Dotkniętych funkcje obejmują dziennika, log10, a pow i inne.

Ten problem jest najbardziej prawdopodobne w następujących scenariuszach:

  • W starej wersji systemu operacyjnego Windows, który nie obsługuje AVX Państwo zapisanie (na przykład Windows Vista) Jeśli jest używany na komputerze, który obsługuje zestaw instrukcji AVX

  • Jeśli zapisywanie stanu AVX jest jawnie wyłączone w konfiguracji rozruchu systemu operacyjnego

  • W środowisku preinstalacji systemu Windows (Windows PE)

    Uwaga Środowisko Preinstalacyjne systemu Windows nie obsługuje zapisywanie stanu AVX.


Ten problem został wcześniej zgłoszony w witrynie Microsoft Connect:

x64 funkcja log () używa instrukcji AVX vpsrlq, bez względu na system operacyjny (tak aby uległa awarii w systemie Vista x64)

Visual Studio 2013 RTM: Błąd generacji AVX2 instrukcje kodu C++ x64

Przyczyna

Ten problem występuje, ponieważ środowisko wykonawcze Visual C++ 2013 x64 C nie sprawdza, czy system operacyjny obsługuje zapisywanie Państwo AVX przed ponowną próbą uruchomienia instrukcji AVX lub FMA3.

Rozwiązanie

Wszystkich dotkniętych plików binarnych C++, które są zbudowane przy użyciu programu Visual C++ 2013 użyć DLL C Runtime (msvcr120.dll), należy zainstalować zaktualizowane Microsoft Visual C++ 2013 Redistributable – 12.0.40660.0 lub nowszej wersji.

Jeśli dotyczy plików binarnych C++ statycznie Visual C++ 2013 C Runtime, należy zaktualizować instalacji programu Visual Studio 2013 przez zainstalowanie poprawki 3174417 i odbudowa i ponownego wdrożenia dotyczy plików binarnych.









Uwaga Ten problem nie wpływa na starsze wersje Visual C++ C Runtime (Visual C++ 2012 i wcześniejszych wersjach). Ten problem został rozwiązany przed wydaniem wstępnym uniwersalny CRT, który jest używany przez program Visual C++ 2015.

Centrum pobierania firmy Microsoft

Aby zaktualizować statycznie Visual C++ 2013 C Runtime, 3174417 poprawka jest wydawane w formie tylko do pobierania aktualizacji i nie jest dystrybuowane za pośrednictwem witryny Windows Update. Jest on dostępny w witrynie sieci Web Microsoft Download Center:

Download Pobierz teraz pakiet.

Aby zaktualizować połączony dynamicznie DLL Visual C++ 2013 C Runtime, zaktualizowany pakiet redystrybucyjny jest dostępna. Aby uzyskać więcej informacji zobacz następujący artykuł z bazy wiedzy Microsoft Knowledge Base:

3179560 aktualizacji dla Visual C++ 2013 i pakiet redystrybucyjny programu Visual C++

Obejście problemu

Aby obejść ten problem, należy wyłączyć FMA3 w biblioteka funkcji matematycznych, jeśli jest narażony na ten problem. Można zbadać, czy system obsługuje instrukcje AVX przez wywołanie GetEnabledXStateFeatures i wyłączanie AVX w CRT jawnie przez wywołanie _set_FMA3_enable(0).

Aby uzyskać więcej informacji zobacz Praca z kontekstem XStatew witrynie MSDN.

Funkcja _set_FMA3_enable(0) jest zadeklarowany w < math.h >, i jest dostępna tylko wtedy, gdy tworzysz aplikacje na x64. (Ten problem dotyczy tylko x64 bibliotekami.) Powoduje to, że biblioteka funkcji matematycznych przywrócić przy użyciu implementacji non-FMA3.

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?
Jeśli naciśniesz pozycję „Wyślij”, Twoja opinia zostanie użyta do ulepszania produktów i usług firmy Microsoft. Twój administrator IT będzie mógł gromadzić te dane. Oświadczenie o ochronie prywatności.

Dziękujemy za opinię!

×