2010-07-16 9 views
7

¿Cuáles son las diferencias entre compilar una aplicación de Mac en Xcode con la arquitectura activa establecida en i386 vs x86_64 (elegida en el menú desplegable en la parte superior izquierda de la ventana principal)? En la configuración de Compilación para el proyecto, las opciones de Arquitectura son Estándar (Universal de 32/64 bits), Universal de 32 bits e Intel de 64 bits. Prácticamente, ¿qué significan estos y cómo uno decide?Diferencias entre compilar para i386 vs x86_64 en Xcode?

Supongamos que se dirige a OS X 10.5 y superior. Veo en el Monitor de actividad que compilar para x86_64 da como resultado una aplicación que usa más memoria que una compilada para i386. ¿Cuál es la ventaja? Sé que 64 bits es "el futuro", pero dado el mayor uso de memoria, ¿tendría sentido elegir 32 bits alguna vez?

Respuesta

7

32/64-bit universal - i386, x86_64, ppc

32 bits universal - i386, ppc

de 64 bits de Intel - Intel 64 bits solamente

ppc64 es ya no es compatible.


x86_64 los binarios son más rápidos por una serie de razones; ABI más rápidas, más registros, en muchos (la mayoría & todas las máquinas nuevas) máquinas del núcleo es de 64 bits & llamadas al kernel son más rápidos, etc.etc.etc ...

Mientras que 64 bits tiene un poco de sobrecarga de memoria directamente relacionada Por lo general, al puntero de las estructuras de datos de su aplicación, tenga en cuenta que las aplicaciones de 32 bits se arrastran en las versiones de 32 bits de todos los marcos. Si la suya es la única aplicación de 32 bits en el sistema, incurrirá en un cantidad masiva de de gastos generales en comparación con la versión de 64 bits.

Las aplicaciones de 64 bits también disfrutan de la última y mejor Objective-C ABI; ivars sintetizados, ivars no frágiles, excepciones unificadas C++/ObjC, bloques @try de costo cero, etc ... y hay una serie de optimizaciones que solo son posibles en 64 bits también.

0

A menos que tenga un motivo para compilar para x86_64, recomiendo compilar para i386 (y PPC si es compatible). Leer Apple's stance al respecto:

Aunque los ejecutables de 64 bits hacen más fácil para usted para manejar grandes volúmenes de datos conjuntos (en comparación con la asignación de memoria de archivos de gran tamaño en una aplicación de 32 bits), el uso de Los ejecutables de 64 bits pueden plantear otros problemas. Por lo tanto, debe hacer la transición de su software a un formato ejecutable de 64 bits solo cuando el entorno de 64 bits ofrece una convincente ventaja de para sus fines específicos.

+4

Si bien eso se aplica al software existente, todo el software nuevo debe estar escrito y optimizado para 64 bits. – bbum

-1

Tengo un comportamiento extraño si compilo el código x86_64. Este código es restringido para iniciarse en la edición del servidor mac os. En la edición estándar funciona bien. ¿Tal vez alguien sepa dónde hay una razón para tener este error?

aplicaciones
0

iOS necesitan para funcionar en muchas arquitecturas diferentes:

arm7: Used in the oldest iOS 7-supporting devices[32 bit] 
arm7s: As used in iPhone 5 and 5C[32 bit] 
arm64: For the 64-bit ARM processor in iPhone 5S[64 bit] 

i386: For the 32-bit simulator 
x86_64: Used in 64-bit simulator 

Xcode básicamente emula el entorno de 32 bits o 64 bits basado en lo establecido en la arquitectura Válido - i386 o x86_64 respectivamente

Cada arquitectura requiere un binario diferente, y cuando construyes una aplicación, Xcode construirá la arquitectura correcta para lo que sea que estés trabajando actualmente. Por ejemplo, si ha solicitado que se ejecute en el simulador, solo compilará la versión i386 (o x86_64 para 64 bits).

Cuestiones relacionadas