2009-01-31 14 views

Respuesta

16

Para nativo aplicaciones, obtendrá beneficios como mayor espacio de direcciones y otras cosas. Sin embargo, las aplicaciones .NET se ejecutan en el CLR, que abstrae cualquier diferencia de arquitectura subyacente.

Suponiendo que solo está tratando con el código administrado, no hay ningún beneficio al apuntar a una plataforma específica; es mejor que simplemente compile con el conjunto de banderas "anycpu" (que está activado por defecto). Esto generará ensambles independientes de la plataforma que funcionarán igual de bien en cualquiera de las arquitecturas en las que se ejecuta CLR.

Dirigir específicamente (digamos) x64 no le dará ninguna mejora de rendimiento, y evitará que sus ensamblados funcionen en una plataforma de 32 bits.

This article tiene un poco más de información sobre el tema.

Actualización: Scott Hanselman acaba de publicar un buen overview de este tema también.

4

En teoría, un programa compilado para x64 se ejecutará más rápido que un programa compilado para x86. La razón de esto es porque hay más registros de propósito general en la arquitectura x64. 32-bit x86 tiene solo 4 registros de propósito general. AMD agregó otros 8 registros de propósito general en sus extensiones x64. Esto permite menos cargas de memoria y un rendimiento (ligeramente) más rápido.

En realidad, esto no hace una gran diferencia en el rendimiento, pero debe ser leve.

El tamaño de la memoria binaria y la huella de memoria aumentarán ligeramente con las instrucciones de 64 bits, pero como x64 sigue siendo una arquitectura CISC, el tamaño binario no se duplica como lo haría en una arquitectura RISC. La mayoría de las instrucciones aún son más cortas que 64 bits de longitud.

+0

¡Gracias por la explicación! – Jason

0

Realmente no soy un experto en arquitecturas de CPU, así que tome mis comentarios a la ligera. Wikipedia tiene un artículo que describe la arquitectura x86-64 (link text).

El x86-64 tiene más registros, esto solo debería ayudar a acelerar el programa. Además, esta nueva arquitectura ofrece nuevos conjuntos de instrucciones que podrían mejorar la velocidad si el compilador se aprovecha de ello.

Otro factor a tener en cuenta es la cantidad de conjuntos de instrucciones disponibles. Cuando un programa se compila en x86, generalmente su objetivo es ejecutar en todos los CPUS existentes de 32 bits (Pentium 1, 2, 3, 4, core *, etc.). Cada nueva generación de CPU agrega nuevos conjuntos de instrucciones, estas instrucciones no pueden ser utilizadas por un programa que quiera ser totalmente portátil en formato binario entre todos los CPUS x86. Como x86-64 bit es una nueva arquitectura, la recompilación de un programa para esta máquina le da al compilador un conjunto más amplio de instrucciones para usar sin preocuparse demasiado por la compatibilidad binaria entre los diferentes CPUS de 64 bits.

2

Lo dudo (dada la plataforma C#/.NET), a menos que esté usando el código nativo. Recuerde, administrado .NET código se compila a IL, y los valores por defecto del interruptor a la plataforma Cualquier CPU, lo que debería obtener un mejor rendimiento en sistemas operativos de 64 bits con su binario existente:

http://blogs.msdn.com/gauravseth/archive/2006/03/07/545104.aspx

Este artículo tiene una tonelada de información útil, incluida la herramienta CorFlags, que le permitirá inspeccionar un encabezado PE.

En general, para los códigos binarios nativos, sí.

3

Como cuestión de hecho, las aplicaciones de 64 bits que no requieren un gran espacio de memoria tienden a trabajar más lento. Una de las razones detrás de esto es que tiene que mover datos de movimiento. Si no puede utilizar> 2 GB de espacio de memoria (para el almacenamiento en caché, por ejemplo), no lo recomendaría.

Aquí hay un enlace interesante que acabo de encontrar http://www.osnews.com/story/5768 con mucha información.

Cuestiones relacionadas