Applies ToVisual Studio Community 2013

Síntomas

Al compilar un programa utilizando Microsoft Visual C++ 2013, el programa se bloquea y recibe una excepción "Illegal Instruction". Esto ocurre porque algunas funciones de la biblioteca de matemáticas de punto flotante en tiempo de ejecución de Visual C++ 2013 x64 C (CRT) no comprueba correctamente si determinadas instrucciones AVX y FMA3 están disponibles antes de que las funciones intentan utilizarlos. Si las instrucciones no están disponibles para su uso, las llamadas a estas funciones producirá una excepción de instrucción ilegal (0xc000001d). Funciones afectadas incluyen log, log10 y pow y otros.Este problema es más probable que se produzca en las situaciones siguientes:

  • En una versión anterior del sistema operativo Windows que no admite AVX estado guardar (por ejemplo, Windows Vista) si se utiliza en un equipo que admite el conjunto de instrucciones AVX

  • Si guardar estado AVX esté explícitamente deshabilitada en la configuración de arranque del sistema operativo

  • En el entorno de preinstalación de Windows (Windows PE)Nota: Windows PE no admite guardar estado AVX.

Se ha detectado este problema en Microsoft Connect:

x64 la función log() utiliza instrucciones de AVX vpsrlq independientemente del sistema operativo (por lo que se bloquea en Windows Vista x64) RTM de 2013 de Visual Studio: Error de generación de AVX2 instrucciones de código de C++ x64

Causa

Este problema se produce porque el tiempo de ejecución de Visual C++ 2013 x64 C no comprueba si el sistema operativo admite AVX estado guardando antes de intentar ejecutar las instrucciones AVX o FMA3.

Solución

Si todos los binarios de C++ afectados que se generan utilizando 2013 de Visual C++ utilizan el archivo DLL en tiempo de ejecución de C (msvcr120.dll), instale el actualizado Microsoft Visual C++ 2013 Redistributable – 12.0.40660.0 o una versión posterior.Si los archivos binarios de C++ afectados vinculan estáticamente el tiempo de ejecución de Visual C++ de 2013 C, debe actualizar la instalación de Visual Studio 2013 de instalar el hotfix 3174417 y reconstruir y volver a implementar los archivos binarios afectados.Nota: Este problema no afecta a las versiones anteriores de Visual C++ C Runtime (2012 de Visual C++ y versiones anteriores). El problema fue solucionado antes del lanzamiento inicial de CRT Universal que se utiliza Visual C++ 2015.

Centro de descarga de Microsoft

Para actualizar el vinculado estáticamente C Runtime de Visual C++ de 2013, la revisión 3174417 se publica como una actualización de sólo descarga y no está distribuido a través de Windows Update. Se encuentra disponible en el sitio Web de Microsoft Download Center:Download Descargue ahora el paquete.Para actualizar el vinculada dinámicamente Visual C++ 2013 C Runtime DLL, un controlador actualizado, versión redistribuible está disponible. Para obtener más información, consulte el siguiente artículo de Microsoft Knowledge Base:

Actualización de 3179560 para 2013 de Visual C++ y Visual C++ Redistributable Package

Solución alternativa

Para evitar este problema, deshabilite FMA3 en la biblioteca math si están afectados por este problema. Puede consultar si el sistema admite las instrucciones AVX llamando a GetEnabledXStateFeatures y deshabilitar AVX en CRT explícitamente mediante una llamada a _set_FMA3_enable(0).Para obtener más información, vea trabajar con contexto XStateen el sitio Web MSDN.La función _set_FMA3_enable(0) se declara en < math.h >, y está disponible sólo cuando se genera para x64. (Este problema afecta sólo a la x64 las bibliotecas.) Esto hace que la biblioteca de matemáticas volver a usar las implementaciones no FMA3.

¿Necesita más ayuda?

¿Quiere más opciones?

Explore las ventajas de las suscripciones, examine los cursos de aprendizaje, aprenda a proteger su dispositivo y mucho más.

Las comunidades le ayudan a formular y responder preguntas, enviar comentarios y leer a expertos con conocimientos extensos.