2010-07-16 9 views
7

सक्रिय आर्किटेक्चर के साथ एक्सकोड में मैक ऐप को संकलित करने के बीच अंतर क्या है i386 बनाम x86_64 (मुख्य विंडो के ऊपरी बाईं ओर स्थित ड्रॉप डाउन में चुना गया)? प्रोजेक्ट के लिए बिल्ड सेटिंग्स में, आर्किटेक्चर विकल्प मानक (32/64-बिट यूनिवर्सल), 32-बिट यूनिवर्सल और 64-बिट इंटेल हैं। व्यावहारिक रूप से, इनका क्या मतलब है और कोई कैसे निर्णय लेता है?एक्सकोड में i386 बनाम x86_64 के लिए संकलन के बीच अंतर?

मान लें कि कोई ओएस एक्स 10.5 और उससे ऊपर लक्षित कर रहा है। मैं गतिविधि मॉनिटर में देखता हूं कि x86_64 के लिए संकलन एक ऐप में होता है जो i386 के लिए संकलित एक से अधिक स्मृति का उपयोग करता है। क्या फायदा है? मुझे पता है कि 64-बिट "भविष्य" है, लेकिन उच्च स्मृति उपयोग दिया गया है, क्या यह 32-बिट का चयन करने के लिए समझ में आता है?

उत्तर

7

32/64-बिट यूनिवर्सल - i386, x86_64, पीपीसी

32-बिट यूनिवर्सल - i386, पीपीसी

64-बिट इंटेल - 64 बिट इंटेल केवल

ppc64 है अब समर्थित नहीं।


x86_64 बाइनरी कई कारणों से तेज़ हैं; तेजी से ABI, अधिक रजिस्टर, कई (सबसे & सभी नई मशीनों) मशीनों पर गिरी 64 बिट & गिरी कॉल, तेजी से कर रहे हैं etc.etc.etc है ...

जबकि 64 बिट स्मृति भूमि के ऊपर सीधे संबंधित का एक सा है , आमतौर पर, आपके ऐप के डेटा संरचनाओं को पॉइंटर कितना भारी होता है, ध्यान रखें कि 32 बिट अनुप्रयोग सभी ढांचे के 32 बिट संस्करणों में खींचते हैं। यदि आपका सिस्टम सिस्टम पर एकमात्र 32 बिट ऐप है, तो इसे भारी 64 बिट संस्करण की तुलना में ओवरहेड की मात्रा लगाना होगा।

64 बिट ऐप्स नवीनतम और सबसे बढ़िया उद्देश्य-सी एबीआई का भी आनंद लेते हैं; संश्लेषित ivars, गैर नाजुक ivars, एकीकृत सी ++/ObjC अपवाद, शून्य लागत @ ट्री ब्लॉक आदि ... और वहाँ कई अनुकूलन हैं जो 64 बिट में भी संभव है।

0

जब तक आपके पास x86_64 के लिए संकलन करने का कोई कारण नहीं है, तो मैं केवल i386 (और यदि आप इसका समर्थन करते हैं तो पीपीसी) के लिए संकलन करने की अनुशंसा करते हैं। इस मामले पर Apple's stance पढ़ें:

हालांकि 64-बिट निष्पादनयोग्य आप बड़े डेटा का प्रबंधन करने के लिए यह आसान बनाने के सेट, का उपयोग (32-बिट आवेदन में बड़ी फ़ाइलों की स्मृति मानचित्रण की तुलना में) 64-बिट निष्पादन योग्य अन्य समस्याएं बढ़ा सकते हैं। इसलिए आप को अपने सॉफ़्टवेयर को 64-बिट निष्पादन योग्य प्रारूप में तभी बदलना चाहिए जब 64-बिट वातावरण आपके विशिष्ट उद्देश्यों के लिए एक आकर्षक लाभ प्रदान करता है।

+4

हालांकि यह मौजूदा सॉफ़्टवेयर पर लागू होता है, लेकिन सभी नए सॉफ़्टवेयर को 64 बिट के लिए लिखा और अनुकूलित किया जाना चाहिए। – bbum

-1

अगर मैं x86_64 कोड संकलित करता हूं तो मुझे अजीब व्यवहार होता है। यह कोड मैक ओएस सर्वर संस्करण पर शुरू करने के लिए प्रतिबंधित है। मानक संस्करण पर यह ठीक काम कर रहा है। शायद किसी को पता है कि यह त्रुटि कहां है?

0

iOS एप्लिकेशन कई अलग अलग आर्किटेक्चर पर चलाने की जरूरत है:

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 मूल रूप से 32 बिट या 64 बिट के वातावरण क्या मान्य वास्तुकला में सेट किया गया है के आधार पर emulates - i386 या क्रमशः x86_64

प्रत्येक आर्किटेक्चर के लिए एक अलग बाइनरी की आवश्यकता होती है, और जब आप कोई ऐप बनाते हैं तो एक्सकोड जो भी आप वर्तमान में काम कर रहे हैं उसके लिए सही आर्किटेक्चर का निर्माण करेगा। उदाहरण के लिए, यदि आपने इसे सिम्युलेटर में चलाने के लिए कहा है, तो यह केवल i386 संस्करण (या 64-बिट के लिए x86_64) बनाएगा।

संबंधित मुद्दे