2010-07-16 11 views
7

Was sind die Unterschiede zwischen dem Kompilieren einer Mac-App in Xcode mit dem Active Architecture-Set auf i386 vs x86_64 (ausgewählt in der Dropdown-Liste oben links im Hauptfenster)? In den Buildeinstellungen für das Projekt sind die Architekturoptionen Standard (32/64-Bit Universal), 32-Bit Universal und 64-Bit Intel. Praktisch, was bedeuten diese und wie entscheidet man?Unterschiede zwischen dem Kompilieren für i386 vs x86_64 in Xcode?

Angenommen, eine zielt auf OS X 10.5 und höher. Ich sehe im Aktivitätsmonitor, dass das Kompilieren für x86_64 zu einer App führt, die mehr Speicher als eine für i386 kompilierte verwendet. Was ist der Vorteil? Ich weiß, 64-Bit ist "die Zukunft", aber angesichts der höheren Speicherauslastung würde es Sinn machen, 32-Bit jemals zu wählen?

Antwort

7

32/64-Bit Universal-- i386, x86_64, ppc

32-Bit-Universal-- i386, ppc

64-Bit-Intel - 64-Bit-Intel

nur

ppc64 ist nicht länger unterstützt.


x86_64 Binärdateien sind aus mehreren Gründen schneller; ABI schneller, Register, auf viele (die meisten & alle neuen Maschinen) Maschinen der Kernel ist 64-Bit-Kernel & Anrufe sind schneller, etc.etc.etc ...

Während 64-Bit ein wenig Speicher-Overhead hat direkt damit verbundenen Im Allgemeinen sollten Sie beachten, dass 32-Bit-Anwendungen in den 32-Bit-Versionen aller Frameworks ziehen, wie stark die Datenstrukturen Ihrer App sind. Wenn Ihre ist die einzige 32-Bit-App auf dem System, wird es eine massive Menge an Overhead im Vergleich zu der 64-Bit-Version.

64-Bit-Apps genießen auch die neuesten und größten Objective-C ABI; synthetisierte Ivars, nicht fragile Ivars, vereinheitlichte C++/ObjC-Exceptions, Zero-Cost @try-Blöcke usw. ... und es gibt eine Reihe von Optimierungen, die auch nur in 64 Bit möglich sind.

0

Sofern Sie keinen Grund haben, für x86_64 zu kompilieren, empfehle ich nur kompilieren für i386 (und PPC, wenn Sie das unterstützen). Lesen Sie Apple's stance auf der Sache:

Obwohl 64-Bit-Programme machen es einfacher für Sie, große Daten zu verwalten Sets (im Vergleich zu Speicherzuordnung von großen Dateien in einer 32-Bit-Anwendung), die Verwendung von Ausführbare 64-Bit-Dateien können andere Probleme verursachen. Daher sollten Sie Ihre Software in ein 64-Bit ausführbares -Format nur dann umwandeln, wenn die 64-Bit-Umgebung einen überzeugenden Vorteil für Ihre spezifischen Zwecke bietet.

+4

Während das gilt für vorhandene Software, sollte alle neue Software für 64-Bit geschrieben und optimiert werden. – bbum

-1

Ich habe seltsames Verhalten, wenn ich x86_64 Code kompilieren. Dieser Code kann nur auf Mac OS Server Edition gestartet werden. In der Standard Edition funktioniert es gut. Vielleicht weiß jemand wo ist ein Grund, diesen Fehler zu haben?

0

iOS-Apps müssen auf vielen verschiedenen Architekturen auszuführen:

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 im Grunde die Umgebung von 32 Bit oder 64 Bit emuliert auf das, was in der Gültiges Architektur gesetzt - i386 oder x86_64 bzw.

Jede Architektur benötigt eine andere Binärdatei. Wenn Sie eine App erstellen, erstellt Xcode die richtige Architektur für das, womit Sie gerade arbeiten. Wenn Sie es zum Beispiel im Simulator ausgeführt haben, wird nur die i386-Version (oder x86_64 für 64-Bit) erstellt.

Verwandte Themen