6

que actualmente usa la siguiente preprocesador define, y diversos parámetros de optimización:C++ define un modo de lanzamiento 'mejor' incorporar VS

  • WIN32_LEAN_AND_MEAN
  • VC_EXTRALEAN
  • NOMINMAX
  • _CRT_SECURE_NO_WARNINGS
  • _SCL_SECURE_NO_WARNINGS
  • _SECURE_SCL = 0
  • _HAS_ITERATOR_DEBUGGING = 0

Mi pregunta es ¿qué otras cosas hacen compañeros Soers utilizan, añadir, definir, con el fin de conseguir un modo de disparo acumulación de VS C++ (2008,2010) para que sea lo más performante como sea posible?

Por cierto, lo he probado en PGO, etc, pero me ayuda un poco, pero nada que comparta con GCC, tampoco estoy usando streams, el C++ del que hablo se parece más a C pero haciendo uso de plantillas y algoritmos STL etc.

Tal como está ahora segmentos de código muy simples palidecen en comparación wRT rendimiento en comparación con lo que GCC produce en decir una máquina x86 equivalente que ejecutan Linux (kernel 2.6+) utilizando 02.

Nota al margen: Creo que muchos de los problemas se relacionan directamente con la versión STL (Dinkum) proporcionada por MS. ¿Podría la gente explicar las experiencias usando STLPort, etc. con VS C++?

+0

También debe enumerar las configuraciones que ha especificado en las propiedades de su proyecto en C/C++, Optimización y posiblemente también en C/C++, Generación de código, ya que pueden afectar en gran medida la optimización que hará el compilador. –

+0

La mayoría de estos no tienen ningún impacto en el rendimiento, simplemente eliminan las advertencias o aceleran la compilación. De todos modos, en mi experiencia, VC++ y GCC producen código que funciona igual de bien. ¿Qué diferencia está viendo y exactamente cómo se invoca cada compilador? – jalf

+0

Esto no está relacionado con el rendimiento, pero debería considerar usar 'prohibido.h' de SDL de Microsoft para una aplicación Win32. – 0xC0000022L

Respuesta

1

no veo cómo la inclusión de:

_CRT_SECURE_NO_WARNINGS 
_SCL_SECURE_NO_WARNINGS 

..gives que una acumulación mejor o con más prestaciones. Todo lo que está haciendo es desactivar las advertencias sobre las funciones obsoletas de MS CRT. Si está haciendo esto porque sabe lo que está haciendo y necesita un código agnóstico de plataforma, de lo contrario lo reconsideraría.

ACTUALIZACIÓN: Además, el compilador solo puede hacer tanto. Apostaría a que obtendrías más código de rendimiento si instrumentaras y arreglases tus puntos de acceso existentes en lugar de tratar de obtener pequeños porcentajes (si es que eso) ganancias de la fase de compilación y enlace.

Update2: _HAS_ITERATOR_DEBUGGING no puede utilizarse al compilar las versiones de lanzamiento de todos modos según la MSDN. WIN32_LEAN_AND_MEANVC_EXTRALEAN (y probablemente NOMINMAX aunque el rendimiento no es la principal razón para deshabilitar esto) podría darle un aumento de rendimiento, aunque el resto tiene un valor dudoso. Debe favorecer el código rápido correcto sobre (quizás - y lo insisto tal vez) un código ligeramente más rápido pero más propenso a los riesgos.

+1

Estoy totalmente de acuerdo, pero debo agregar que el rendimiento NO es una palabra. –

+2

En ausencia de una palabra más adecuada, ¿qué debe hacer el lingüista renegado? Eventualmente los diccionarios se pondrán al día. :-) (De acuerdo con Jeff Boulter de todos modos) – Konrad

+2

@Charles: Según Dictionary.com, lo es. Es un artista intérprete o ejecutante de la misma manera que un informante es un informante. Sin embargo, creo que esta es una palabra más que adecuada para expresar el concepto y, después de todo, los diccionarios de inglés son descriptivos en lugar de preceptivos. –

Cuestiones relacionadas