सवाल 32-बिट बनाम 64-बिट सिस्टम


32-बिट और 64-बिट सिस्टम के बीच अंतर क्या हैं?

यदि आपने दोनों का उपयोग किया है, तो आपने किस प्रकार के तेज मतभेदों का अनुभव किया है?

क्या कुछ मामलों में 64-बिट सिस्टम पर 32-बिट प्रोग्राम का उपयोग करना एक समस्या होगी?


219
2017-10-17 11:14


मूल


यहां कई भ्रम हैं, और अन्यथा जहां वेब पर, भौतिक पते (राम तक पहुंच) के बीच पीईए इस पर असर डालता है, मां बोर्ड इस पर प्रभाव डालता है, और तार्किक संबोधन (प्रति प्रक्रिया वर्चुअल मेमोरी)। 32 बिट ओएस पर वर्चुअल मेमोरी 4 जीबी से कम है जो कर्नेल रिजर्व करता है। यह रैम से स्वतंत्र है जिसमें आपके पास 0.1 एमबी या 8 जीबी रैम हो सकता है और आपके पास 4 जीबी वर्चुअल मेमोरी होगी (लेकिन कुछ कर्नेल द्वारा आरक्षित हैं)। पीईए का उपयोग अधिक रैम के लिए किया जा सकता है, लेकिन यह सही जवाब नहीं है क्योंकि कर्नेल इसे सभी तक नहीं पहुंचा सकता है। - ctrl-alt-delor


जवाब:


नोट: ये उत्तर मानक x86- आधारित पीसी CPUs (इंटेल और एएमडी) और विंडोज (आमतौर पर अंत उपयोगकर्ताओं के लिए कॉन्फ़िगर किए गए) पर लागू होते हैं। अन्य 32-बिट या 64-बिट चिप्स, अन्य ओएस, और अन्य ओएस कॉन्फ़िगरेशन में विभिन्न ट्रेडऑफ हो सकते हैं।

एक तकनीकी परिप्रेक्ष्य से, एक 64-बिट ओएस आपको देता है:

  • अलग-अलग प्रक्रियाओं को प्रत्येक 4 जीबी रैम से अधिक संबोधित करने की अनुमति देता है (व्यावहारिक रूप से, अधिकांश लेकिन 32-बिट ओएस सभी कुल उपयोग योग्य सिस्टम रैम को 4 जीबी से भी कम तक सीमित नहीं करते हैं, केवल प्रति-आवेदन अधिकतम नहीं)।

  • सभी पॉइंटर्स 4 बाइट्स के बजाय 8 बाइट्स लेते हैं। रैम उपयोग पर प्रभाव कम है (क्योंकि आपके पास पॉइंटर्स के गीगाबाइट से भरा अनुप्रयोग होने की संभावना नहीं है), लेकिन सबसे खराब सैद्धांतिक मामले में, यह सीपीयू कैश को 1/2 को कई पॉइंटर्स (बनाने के लिए सक्षम कर सकता है) यह 1/2 आकार प्रभावी ढंग से हो सकता है)। अधिकांश अनुप्रयोगों के लिए, यह एक बड़ा सौदा नहीं है।

  • 64-बिट मोड में कई सामान्य उद्देश्य सीपीयू रजिस्ट्रार हैं। रजिस्टर्स आपके पूरे सिस्टम में सबसे तेज़ स्मृति हैं। 32-बिट मोड में केवल 8 और 64-बिट मोड में 16 सामान्य प्रयोजन रजिस्ट्रार हैं। मैंने लिखा है कि वैज्ञानिक कंप्यूटिंग अनुप्रयोगों में, मैंने 64-बिट मोड में पुन: संकलन करके 30% प्रदर्शन को बढ़ावा दिया है (मेरा एप्लिकेशन वास्तव में अतिरिक्त रजिस्टरों का उपयोग कर सकता है)।

  • अधिकांश 32-बिट ओएस वास्तव में केवल व्यक्तिगत अनुप्रयोगों को 2 जीबी रैम का उपयोग करने देते हैं, भले ही आपके पास 4 जीबी इंस्टॉल हो। ऐसा इसलिए है क्योंकि अन्य 2 जीबी पता स्थान ओएस के साथ, और ड्राइवरों के साथ संवाद के लिए डेटा साझा करने के लिए आरक्षित है। विंडोज और लिनक्स आपको इस ट्रेडऑफ को 3 जीबी अनुप्रयोगों के लिए समायोजित करने और 1 जीबी साझा करने की सुविधा देगा, लेकिन इससे कुछ अनुप्रयोगों के लिए समस्याएं पैदा हो सकती हैं जो परिवर्तन की अपेक्षा नहीं करते हैं। मैं यह भी अनुमान लगा रहा हूं कि यह एक ग्राफिक्स कार्ड को अपंग कर सकता है जिसमें 1 जीबी रैम है (लेकिन मुझे यकीन नहीं है)। एक 64-बिट ओएस व्यक्तिगत 32-बिट अनुप्रयोगों को पूर्ण 4 जीबी के साथ खेलने के लिए दे सकता है।

किसी उपयोगकर्ता के परिप्रेक्ष्य से:

  • 32-बिट ओएस पर एप्लिकेशन के 32-बिट संस्करण की तुलना में 64-बिट ओएस में 64-बिट एप्लिकेशन के लिए एप्लिकेशन की गति आमतौर पर तेज़ होती है, लेकिन अधिकांश उपयोगकर्ताओं को यह स्पीड-अप दिखाई नहीं देगा। सामान्य उपयोगकर्ताओं के लिए अधिकतर एप्लिकेशन वास्तव में अतिरिक्त रजिस्टरों का लाभ नहीं लेते हैं या लाभ कैश भरने वाले बड़े पॉइंटर्स द्वारा संतुलित होते हैं।

  • यदि आपके पास कोई मेमोरी होग एप्लिकेशन (जैसे फोटो एडिटर्स, वीडियो प्रोसेसिंग, वैज्ञानिक कंप्यूटिंग इत्यादि) हैं, तो यदि आपके पास 3 जीबी से अधिक रैम है (या खरीद सकते हैं), और आप एप्लिकेशन का 64-बिट संस्करण प्राप्त कर सकते हैं, पसंद आसान है: 64-बिट ओएस का उपयोग करें।

  • कुछ हार्डवेयर में 64-बिट ड्राइवर नहीं होते हैं। स्विच करने से पहले अपने मदरबोर्ड, सभी प्लग-इन कार्ड और सभी यूएसबी डिवाइस देखें। ध्यान दें कि विंडोज विस्टा के प्रारंभिक दिनों में, ड्राइवरों के साथ बहुत सी समस्याएं थीं। इन दिनों चीजें आम तौर पर बेहतर होती हैं।

  • यदि आप एक समय में इतने सारे एप्लिकेशन चलाते हैं कि आप रैम से बाहर हो रहे हैं (आमतौर पर आप इसे बता सकते हैं क्योंकि आपका कंप्यूटर वास्तव में धीमा हो रहा है और आप हार्ड डिस्क ड्राइव क्रंचिंग सुनते हैं), तो आप 64-बिट ओएस चाहते हैं (और पर्याप्त रैम)।

  • आप बिना किसी समस्या के 64-बिट विंडोज़ में 32-बिट अनुप्रयोग (लेकिन ड्राइवर नहीं) चला सकते हैं। 64-बिट विंडोज़ में 32-बिट अनुप्रयोग के लिए मैंने जो सबसे खराब मंदी की है, वह लगभग 5% है (जिसका अर्थ है कि अगर 32-बिट विंडोज़ में कुछ करने में 60 सेकंड लग गए, तो इसमें 60 * 1.05 = 65 सेकेंड लग गए 64-बिट विंडोज़ में एक ही 32-बिट अनुप्रयोग)।

32-बिट बनाम 64-बिट क्या करता है नहीं मतलब:

X86 सिस्टम पर, 32-बिट बनाम 64-बिट सीधे पॉइंटर्स के आकार को संदर्भित करता है। बस इतना ही।

  • यह सी के आकार का उल्लेख नहीं करता है int प्रकार। यह विशेष संकलक कार्यान्वयन द्वारा तय किया गया है, और अधिकांश लोकप्रिय कंपाइलर 32-बिट का चयन करते हैं int 64-बिट सिस्टम पर।

  • ऐसा नहीं होता सीधे सामान्य गैर-सूचक रजिस्टर के आकार का संदर्भ लें। हालांकि, 64-बिट अंकगणितीय रजिस्टरों का उपयोग करने की आवश्यकता होती है कि एप्लिकेशन और ओएस 64-बिट पॉइंटर मोड में भी चल रहे हों।

  • ऐसा नहीं होता सीधे भौतिक पता बस के आकार का संदर्भ लें। उदाहरण के लिए, 64 बिट चौड़ी कैश लाइनों वाली अधिकतम प्रणाली और अधिकतम 512 जीआईबी मेमोरी को केवल अपनी पता बस में 33 बिट्स की आवश्यकता होती है (यानी। log2(512*1024**3) - log2(64) = 33)।

  • यह भौतिक डेटा बस के आकार का संदर्भ नहीं देता है: यह विनिर्माण लागत (सीपीयू सॉकेट में पिन की संख्या) और कैश लाइन आकार से अधिक संबंधित है।


262
2017-10-17 13:11



बहुत अच्छा जवाब। विशेष रूप से क्योंकि आपने नोट किया कि वास्तव में 4 जीबी रैम सीमा नहीं है, लेकिन स्मृति उपयोग सीमा को संसाधित करती है। सिर्फ आपकी जानकारी के लिए, मुझे लगता है कि आपको इस लिंक पर एक नज़र डालना चाहिए: unawave.de/windows-7-tipps/32-bit-ram-barrier.html?lang=EN - Breakthrough
वे ऐसे अनुप्रयोग हैं जो 64 बिट विंडोज़ पर काम नहीं करते हैं: 16 बिट अनुप्रयोग / जो 32 बिट या हस्ताक्षरित कर्नेल-मोड ड्राइवरों का उपयोग करते हैं। यह मेरे जैसे सॉफ़्टवेयर व्यसन के लिए बहुत कुछ है ... - fluxtendu
@flextendu, उन पुराने कार्यक्रमों की प्रदर्शन आवश्यकताओं को देखते हुए, आप लगभग निश्चित रूप से उन्हें वर्चुअल मशीन में चला सकते हैं। वीएमवेयर प्लेयर, वर्चुअल पीसी और वर्चुअल बॉक्स के साथ, यदि आपके पास 32 बिट विंडोज लाइसेंस है तो उनमें से किसी एक को आजमाने की कोई वजह नहीं है। यदि आप इसके साथ गड़बड़ नहीं करना चाहते हैं, तो वे शायद "विंडोज एक्सपी मोड" के तहत भी काम करेंगे। - Mark Booth
बीटीडब्ल्यू, 32-बिट अनुप्रयोग 2 जीबीबी रैम का उपयोग नहीं करेंगे जब तक कि उनके मैनिफेस्ट में कोई विशिष्ट ध्वज सक्षम न हो। स्रोत: blogs.technet.com/b/markrussinovich/archive/2008/11/17/... - Hello71
हां, मुझे यकीन है कि हैलो 71 ने कुछ महत्वपूर्ण पर मारा है जो यहां शामिल नहीं है: अधिकांश 32-बिट ऐप्स कभी भी अतिरिक्त रैम का लाभ नहीं उठाएंगे। मुझे लगता है कि यह उल्लेख करने लायक है, नहीं? - Django Reinhardt


असल में आप सब कुछ बड़े पैमाने पर कर सकते हैं:

  1. प्रति ओएस रैम: ओएस के लिए x86 पर 4 जीबी की रैम सीमा (ज्यादातर समय)
  2. प्रति प्रक्रिया रैम: प्रक्रियाओं के लिए x86 पर 4 जीबी की रैम सीमा (हमेशा)। यदि आपको लगता है कि यह महत्वपूर्ण नहीं है, तो एक विशाल MSSQL डेटाबेस गहन अनुप्रयोग चलाने का प्रयास करें। यदि आप इसे उपलब्ध कराते हैं और बहुत बेहतर चलाते हैं तो यह 4 जीबी का उपयोग करेगा।
  3. पते: पता 32 बिट्स के बजाय 64 बिट्स हैं जो आपको "बड़े" कार्यक्रमों की अनुमति देते हैं जो अधिक स्मृति का उपयोग करते हैं।
  4. कार्यक्रमों के लिए उपलब्ध हैंडल: आप अधिक फ़ाइल हैंडल, प्रक्रियाओं, ... बना सकते हैं ... Windows x64 पर उदाहरण आप प्रति प्रक्रिया 2000 थ्रेड बना सकते हैं, लेकिन x86 पर कुछ सौ के करीब।
  5. व्यापक कार्यक्रम उपलब्ध हैं: एक x64 से आप x86 और x64 दोनों प्रोग्राम चला सकते हैं। (उदाहरण विंडोज़: wow64, windows32 windows64 पर windows32)
  6. इम्यूलेशन विकल्प: एक x64 से आप दोनों x86 और x64 वीएम चला सकते हैं।
  7. और तेज: 64-बिट CPU पर कुछ गणना तेजी से होती है
  8. एकाधिक सिस्टम संसाधनों को विभाजित करना: जब आप कम से कम एक वीएम चलाने के लिए अपने सिस्टम संसाधनों को विभाजित करना चाहते हैं तो बहुत सी रैम मेमोरी बहुत महत्वपूर्ण है।
  9. विशेष कार्यक्रम उपलब्ध हैं: कई नए कार्यक्रम केवल x64 का समर्थन करते हैं। उदाहरण एक्सचेंज 2007।
  10. भविष्य अप्रचलित x86 ?: समय के साथ-साथ 64-बिट का उपयोग किया जाएगा और अधिक से अधिक x86 का उपयोग नहीं किया जाएगा। तो विक्रेता केवल 64-बिट और अधिक का समर्थन करेंगे।

64-बिट आर्किटेक्चर के 2 बड़े प्रकार x64 और IA64 आर्किटेक्चर हैं। लेकिन x64 अब तक का सबसे लोकप्रिय है।

x64 x86 कमांड के साथ-साथ x64 कमांड चला सकता है। IA64 x86 कमांड चलाता है, लेकिन यह एसएसई एक्सटेंशन नहीं करता है। X86 निर्देश चलाने के लिए Itanium पर समर्पित हार्डवेयर है; यह एक एमुलेटर है, लेकिन हार्डवेयर में।

जैसा कि @ फिल ने उल्लेख किया है कि आप गहराई से देख सकते हैं यह कैसे काम करता है


107
2017-09-25 12:19



उम। IA64 x86 कमांड चलाता है I हालांकि, यह एसएसई एक्सटेंशन नहीं करता है। X86 निर्देश चलाने के लिए Itanium पर समर्पित हार्डवेयर है; यह एक एमुलेटर है, लेकिन हार्डवेयर में। - tzot
कुछ साल पहले, रेमंड चेन ने 2000 थ्रेड "सीमा" के बारे में पोस्ट किया था, और यह शहरी किंवदंती कम या ज्यादा है: blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx - bk1e
Arstchnica के लिए उनके स्पष्टीकरण के लिए उपरोक्त। - Avihu Turzion
4 जीबी की रैम सीमा बिल्कुल सही नहीं है (बल्कि यह घरेलू उपयोगकर्ताओं विंडोज सिस्टम पर एक कृत्रिम सीमा है), जांचें पीएई। सबसे अद्यतित हार्डवेयर के साथ, एक लिनक्स पीएई कर्नेल (जिसे 32 बिट के लिए डिफ़ॉल्ट रूप से उपयोग किया जाता है) 4 जीबी से अधिक ठीक से संबोधित कर सकता है। फ्रीबीएसडी और नेटबीएसडी पर भी लागू होता है। - Izzy
32 बिट सिस्टम उस "पते" (3 पेंक्ट) की वजह से 4 जीबी (1 पंकट) से अधिक का उपयोग नहीं कर सकते हैं। क्योंकि उच्चतम 32 बिट संख्या 4.294.967.296 (= 4 जीबी) है। तो आपके पहले और तीसरे पेंक समान हैं। आप तीसरे पंक को हटा सकते हैं। :) - Jet


इस समय लोगों का सबसे बड़ा प्रभाव यह होगा कि 32 बिट पीसी केवल अधिकतम 4 जीबी मेमोरी को संबोधित कर सकता है। जब आप ऑपरेटिंग सिस्टम द्वारा अन्य उपयोगों के लिए आवंटित स्मृति लेते हैं तो आपका पीसी शायद 3.25 जीबी उपयोग योग्य मेमोरी दिखाएगा। 64 बिट तक ले जाएं और यह सीमा गायब हो जाती है।

यदि आप गंभीर विकास कर रहे हैं तो यह बहुत महत्वपूर्ण हो सकता है। कई आभासी मशीनों को चलाने का प्रयास करें और आप जल्द ही स्मृति से बाहर हो जाते हैं। सर्वर को अतिरिक्त मेमोरी की आवश्यकता होने की अधिक संभावना है और इसलिए आप पाएंगे कि 64 बिट उपयोग डेस्कटॉप पर सर्वर से कहीं अधिक है। मूर का कानून यह सुनिश्चित करता है कि मशीनों पर हमें और अधिक याद आएगी और इसलिए किसी बिंदु पर डेस्कटॉप मानक के रूप में 64 बिट तक भी स्विच हो जाएगा।

प्रोसेसर मतभेदों के बारे में अधिक विस्तृत विवरण के लिए इस उत्कृष्ट लेख को देखें ArsTechnica


46
2017-09-25 12:16



32-बिट प्लेटफ़ॉर्म और 4 जीबी सीमा कुछ हद तक गलत है और (मुख्य रूप से) एक ऑपरेटिंग सिस्टम वास्तुशिल्प पसंद / डिज़ाइन सीमा है। वास्तव में, 32-बिट्स से 4 जीबी वास्तव में एक प्रक्रिया वीए स्पेस में एक सीमा पर है। भौतिक पता इंटेल 32-बिट CPU पर 36-बिट्स का समर्थन करता है - Tall Jeff
आप एक अच्छा मुद्दा बनाते हैं जो निश्चित रूप से सच है। लेकिन पीसी उपयोगकर्ताओं की वास्तविक दुनिया में असर यह है कि वहां मशीन पूरी 4 जीबी का उपयोग नहीं करने जा रही है। मेरे पिताजी को यह मुद्दा था और अभी भी उलझन में है कि उसके लिए भुगतान किया गया 4 जीबी पूरी तरह से इस्तेमाल नहीं किया जा सकता है।
अपने बिंदु की सराहना करते हैं, लेकिन सिर्फ इस धारणा को ड्राइव करने की कोशिश कर रहे हैं कि फिक्स प्रोसेसर में नहीं है या 64-बिट्स पर जा रहा है, यह केवल थोड़ा बेहतर ओएस डिज़ाइन का मामला है। यह संबोधित किया गया है, उदाहरण के लिए, विंडोज के एंटरप्राइज़ संस्करणों पर भी 32-बिट संस्करणों में वापस। यह 64 जीबी रैम की अनुमति देता है। - Tall Jeff
तकनीकी रूप से, सीमा गायब नहीं होती है। यह अगले दशक या उससे भी अधिक समय में मशीन पर उस रैम को स्थापित करने के लिए अव्यवहारिक / असंभव है, जहां आगे बढ़ता है।
मेरी टिप्पणी देखें पीएई उपर्युक्त: 4 जीबी सीमा पूरी प्रणाली के लिए सच नहीं है - लेकिन केवल एकल प्रक्रियाओं पर लागू होती है (कोई प्रक्रिया 4 जीबी तक नहीं पहुंच सकती है और खुद ही - लेकिन पूरी प्रणाली, यानी सभी प्रक्रियाओं को एक साथ पीएई सक्षम कर सकते हैं)। इसलिए जब तक कि किसी के पास 4 जीबी और ऊपर तक पहुंचने में सक्षम होने से लाभ होता है (जैसे वीडियो संपादकों / बड़ी वीडियो फ़ाइलों के साथ कनवर्टर्स) तथा 8 जीबी + स्थापित, 32 बिट या 64 बिट का उपयोग कर यह बहुत अंतर नहीं करना चाहिए। - Izzy


कुछ भी मुफ्त नहीं है: हालांकि 64-बिट अनुप्रयोग कर सकते हैं 32-बिट अनुप्रयोगों की तुलना में अधिक मेमोरी तक पहुंचें, नकारात्मकता यह है कि वे जरुरत अधिक स्मृति उन सभी पॉइंटर्स जिन्हें 4 बाइट्स की आवश्यकता होती थी, अब उन्हें 8 की आवश्यकता होती है। उदाहरण के लिए, 64-बिट आर्किटेक्चर के लिए बनाया गया है, तो Emacs में डिफ़ॉल्ट आवश्यकता 60% अधिक स्मृति है। यह अतिरिक्त पदचिह्न स्मृति पदानुक्रम के प्रत्येक स्तर पर प्रदर्शन को नुकसान पहुंचाता है: बड़े निष्पादन योग्य डिस्क से लोड होने में अधिक समय लेते हैं, बड़े काम करने वाले सेट अधिक पेजिंग और बड़ी वस्तुओं का कारण प्रोसेसर कैश में कम फिट होते हैं। यदि आप 16 के एल 1 कैश वाले सीपीयू के बारे में सोचते हैं, तो 32-बिट एप्लिकेशन 4096 पॉइंटर्स के साथ काम करने से पहले काम कर सकता है और एल 2 कैश में जाता है लेकिन केवल 2048 पॉइंटर्स के बाद 64-बिट एप्लिकेशन को एल 2 कैश तक पहुंचना पड़ता है।

X64 पर यह अन्य रजिस्ट्रारों जैसे अन्य आर्किटेक्चरल सुधारों से कम हो गया है, लेकिन पावरपीसी पर यदि आपका एप्लिकेशन उपयोग नहीं कर सकता है> 4 जी "पीपीसी 64" से "पीपीसी" पर तेज़ी से दौड़ने की संभावना है। इंटेल पर भी वर्कलोड हैं जो x86 पर तेजी से चलते हैं, और कुछ x86 से x64 पर 5% से अधिक तेजी से चलते हैं।


31
2017-10-13 10:45



यह उत्तर बताता है कि PowerPC64 x86-64 जितना अच्छा नहीं है। सच्चाई यह है कि powerpc64 ने powerpc में सुधार नहीं किया, क्योंकि Powerpc टूटा नहीं गया था। - ctrl-alt-delor
लिनक्स में अब x32-64 के सभी स्पीड फायदे हैं (अधिक रजिस्ट्रार, एबीआई को फिर से डिज़ाइन किया गया है), लेकिन 32 बिट पॉइंटर्स के साथ। यह इंगित करने के लिए +1 कि 64 बिट मोड के लाभ वास्तविक चौड़ाई में वृद्धि से नहीं हैं, लेकिन आर्किटेक्चर को वापस रखने वाले सामानों को छोड़ने का मौका से। 64 बिट regs के पास कुछ अनुप्रयोगों के लिए मूल्य है, लेकिन 64 बिट पॉइंटर स्पेस की अक्सर आवश्यकता होती है। - Peter Cordes


एक 64-बिट ओएस अधिक रैम का उपयोग कर सकते हैं। अभ्यास में, इसके बारे में यह है। 64-बिट विस्टा / 7 फैनसीयर सुरक्षा सुविधाओं का उपयोग करें जहां वे रैम में महत्वपूर्ण घटक डालते हैं, लेकिन यह वास्तव में 'उल्लेखनीय' नहीं है।

ChrisInEdmonton से:

एक ix86 पर 32-बिट ऑपरेटिंग सिस्टम   पीएई के साथ प्रणाली 64 तक पता कर सकते हैं   जीबी रैम एक 64-बिट ऑपरेटिंग सिस्टम   x86-64 पर 256 टीबी तक पहुंच सकते हैं   आभासी पता स्थान, हालांकि यह हो सकता है   बाद के प्रोसेसर में उठाया जाना चाहिए   16 ईबी तक ध्यान दें कि कुछ ऑपरेटिंग   सिस्टम पता स्थान सीमित करें   आगे, और अधिकांश मदरबोर्ड होगा   अतिरिक्त प्रतिबंध हैं।


19
2017-10-17 11:24



एक ओएस के लिए, 32-बिट बनाम 64-बिट केवल पॉइंटर्स के आकार को संदर्भित करता है (आपका पहला पैराग्राफ सही तरीके से चर्चा करता है)। -1: कुछ ओएस डिफ़ॉल्ट पूर्णांक आकार को पॉइंटर आकार में लॉक करना चुनते हैं, लेकिन न तो विंडोज़ और न ही लिनक्स ऐसा करते हैं। इंटीजर गणित परिशुद्धता अपरिवर्तित है। व्यापक रूप से उपयोग नहीं किया जाने वाला ओएस फ्लोटिंग पॉइंट परिशुद्धता बदलता है (दूसरा अनुच्छेद दावा क्या है)। "फ्लोट" या "सिंगल" 32-बिट्स है, "डबल" 64-बिट्स है, भले ही ओएस 32-बिट या 64-बिट पॉइंटर्स का उपयोग करता हो। - Mr Fooz
आह, मैं स्पष्ट रूप से गलत था, इसे साफ़ करने के लिए धन्यवाद :) - Phoshi
कोई बात नहीं। -1 -> +1 - Mr Fooz
आपके जवाब को संपादित करने के लायक हो सकता है कि कितनी रैम तक पहुंचा जा सकता है। पीएई के साथ एक ix86 प्रणाली पर 32-बिट ऑपरेटिंग सिस्टम 64 जीबी रैम तक का पता लगा सकता है। X86-64 पर एक 64-बिट ऑपरेटिंग सिस्टम 256 टीबी वर्चुअल एड्रेस स्पेस तक पहुंच सकता है, हालांकि इसे बाद के प्रोसेसर में 16 ईबी तक बढ़ाया जा सकता है। ध्यान दें कि कुछ ऑपरेटिंग सिस्टम एड्रेस स्पेस को आगे बढ़ाते हैं, और अधिकांश मदरबोर्ड में अतिरिक्त प्रतिबंध होंगे। - ChrisInEdmonton
मैं इसे सरल रखना चाहता था, क्योंकि संख्याएं हैं अधिकतर इस समय अप्रासंगिक होने के लिए पर्याप्त उच्च है, लेकिन अब उन्हें छूने में कोई दिक्कत नहीं हो सकती है। - Phoshi


निश्चित नहीं है कि मैं एक संपूर्ण निबंध लिखने के बिना आपके सभी सवालों का जवाब दे सकता हूं (हमेशा Google है ...), लेकिन आपको 64 बिट के लिए अपने ऐप्स को अलग-अलग डिज़ाइन करने की आवश्यकता नहीं है। मुझे लगता है कि इसका उल्लेख क्या किया जा रहा है कि आपको चीजों के बारे में सावधान रहना होगा जैसे पॉइंटर आकार अब स्याही के समान आकार नहीं हैं। और आपके पास कुछ प्रकार के डेटा पर अंतर्निहित मान्यताओं के साथ संभावित समस्याओं का पूरा भार है जो चार बाइट लंबा है जो अब सत्य नहीं हो सकता है।

यह आपके आवेदन में सभी प्रकार की चीजों की यात्रा करने की संभावना है - फ़ाइल से बचत / लोडिंग से सबकुछ, डेटा के माध्यम से डेटा, डेटा संरेखण, डेटा पर बिटवाईर संचालन के लिए सभी तरह से। यदि आपके पास मौजूदा कोडबेस है, तो आप बंदरगाह की कोशिश कर रहे हैं, या दोनों पर काम कर रहे हैं, तो संभवतः आपके पास काम करने के लिए बहुत कम निगल्स होंगे।

मुझे लगता है कि यह एक डिजाइन के बजाय एक कार्यान्वयन मुद्दा है। अर्थात। मुझे लगता है कि "डिजाइन" कहने के लिए, एक फोटो संपादन पैकेज वही होगा जो शब्दों को समझता है। हम कोड लिखते हैं जो 32 बिट और 64 बिट दोनों संस्करणों में संकलित होता है, और डिज़ाइन निश्चित रूप से दोनों के बीच भिन्न नहीं होता है - यह एक ही कोडबेस है।

64 बिट पर मौलिक "बड़ा सौदा" यह है कि आप 32 बिट से अधिक मेमोरी एड्रेस स्पेस तक पहुंच प्राप्त करते हैं। इसका मतलब है कि आप वास्तव में अपने कंप्यूटर में 4 जीबी से अधिक मेमोरी में चक कर सकते हैं और वास्तव में यह एक फर्क पड़ता है।

मुझे यकीन है कि अन्य उत्तर I से अधिक विवरण और लाभ में जाएंगे।

अंतर का पता लगाने के मामले में प्रोग्रामेटिक रूप से आप केवल एक सूचक के आकार की जांच करें (उदा। आकार (शून्य *))। 4 का जवाब इसका 32 बिट्स है, और 8 का मतलब है कि आप 64 बिट वातावरण में चल रहे हैं।


14
2017-09-25 12:29



यदि आप ऐसे प्रोग्राम लिखते हैं जो आकस्मिक रूप से मानते हैं कि कुछ सूचक प्रकार कुछ अभिन्न प्रकार के समान आकार हैं, तो आप इसे रिंग करते हैं। यह लंबे समय से सच रहा है। - David Thornley
@ डेविड: आप बिल्कुल सही हैं। दुर्भाग्य से, वहाँ कोड का एक टन है जो वास्तव में करता है।


32 बिट प्रक्रिया में वर्चुअल एड्रेस स्पेस 4 जीबी है; यह कुछ ऐप्स के लिए बहुत कम हो सकता है। एक 64 बिट ऐप में लगभग असीमित पता स्थान है (बेशक यह सीमित है, लेकिन आप शायद इस सीमा को हिट नहीं करेंगे)।

ओएसएक्स पर अन्य फायदे हैं। देखें निम्नलिखित लेख, 64 बिट पता स्थान में कर्नेल क्यों चल रहा है (भले ही आपका ऐप 64 या 32 चलाता हो) या 64 बिट पता स्थान (जबकि कर्नेल अभी भी 32 बिट है) में आपका ऐप चला रहा है, तो बेहतर प्रदर्शन होता है। संक्षेप में: यदि कोई भी 64 बिट (कर्नेल या ऐप, या दोनों कोर्स) है, तो जब भी आप कर्नेल से स्पेस और बैक का उपयोग करने के लिए स्विच करते हैं तो टीएलबी ("अनुवाद लुकसाइड बफर") को फ्लश नहीं किया जाना चाहिए (जो गति देगा रैम का उपयोग करें)।

"लंबे लंबे int" चर के साथ काम करते समय भी आपके पास प्रदर्शन लाभ होता है (64 बिट वैरिएबल जैसे uint64_t)। एक 32 बिट सीपीयू दो 64 बिट मानों को जोड़ / विभाजित / घटाना / गुणा कर सकता है, लेकिन एक हार्डवेयर ऑपरेशन में नहीं। इसके बजाय इसे इस ऑपरेशन को दो (या अधिक) 32 बिट ऑपरेशंस में विभाजित करने की आवश्यकता है। तो एक ऐप जो 64 बिट नंबरों के साथ बहुत काम करता है, उसे हार्डवेयर में सीधे 64 बिट गणित करने में सक्षम होने का एक तेज लाभ होगा।

अंतिम लेकिन कम से कम x86-64 आर्किटेक्चर क्लासिक x86 आर्किटेक्चर की तुलना में अधिक रजिस्ट्रार प्रदान करता है। रजिस्ट्रार के साथ काम करना रैम के साथ काम करने से ज्यादा तेज़ है और सीपीयू जितना अधिक रजिस्ट्रार करता है, उतनी बार इसे रजिस्टर मानों को रैम में वापस लेना पड़ता है और रजिस्टरों को वापस ले जाता है।

यह पता लगाने के लिए कि आपका सीपीयू 64 बिट मोड में चलाया जा सकता है, आप विभिन्न sysctl चर देख सकते हैं। जैसे एक टर्मिनल खोलें और टाइप करें

sysctl machdep.cpu.extfeatures

यदि यह ईएम 64 टी सूचीबद्ध करता है, तो आपका सीपीयू x86-64 मानक के अनुसार 64 बिट पता स्थान का समर्थन करता है। आप भी देख सकते हैं

sysctl hw.optional.x86_64

यदि यह 1 (सत्य / सक्षम) कहता है, तो आपका सीपीयू x86-64 बिट मोड का समर्थन करता है, अगर यह 0 (झूठा / अक्षम) कहता है, तो ऐसा नहीं होता है। यदि सेटिंग बिल्कुल नहीं मिलती है, तो इसे गलत मानें।

नोट: आप मूल सी ऐप के भीतर से sysctl चर भी ला सकते हैं, कमांड लाइन टूल का उपयोग करने की आवश्यकता नहीं है। देख

man 3 sysctl

10
2017-09-25 12:34



त्रुटि: "machdep.cpu.extfeatures" एक अज्ञात कुंजी है
मुझे लगता है कि इसे ईएम 64 टी भी नहीं कहा जाता है, अगर आप इंटेल रखने के लिए दुर्भाग्यपूर्ण नहीं हैं।


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

इस धागे में कुछ चीजें कहा गया है (जैसे कि # रजिस्टरों की दोगुनी) केवल x86-> x86_64 पर लागू होती है, सामान्य रूप से 64-बिट तक नहीं। इस तथ्य की तरह कि x86_64 के तहत एक गारंटीकृत एसएसई 2, 686 ऑपकोड और पीआईसी करने का एक सस्ता तरीका है। ये विशेषताएं सख्ती से लगभग 64-बिट नहीं हैं, लेकिन विरासत को काटने और ज्ञात x86 सीमाओं का उपचार करने के बारे में हैं

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

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

आमतौर पर संरेखण ओवरहेड 64-बिट आर्किटेक्चर पर भी बड़ा होता है (रिकॉर्ड 32-बिट केवल 32-बिट और 64-बिट मानों का मिश्रण बन जाता है), संरचनाओं को और भी उड़ाते हैं।

कुल मिलाकर, मेरे सरल परीक्षणों से संकेत मिलता है कि वे ड्राइवरों और रनटाइम पुस्तकालयों को पूरी तरह से अनुकूलित कर चुके हैं, औसत ऐप के लिए कोई महत्वपूर्ण गति अंतर नहीं देते हैं, तो वे मोटे तौर पर एक-दूसरे को रद्द कर देंगे। हालांकि कुछ ऐप्स अचानक तेज हो सकते हैं (उदाहरण के लिए जब एईएस के आधार पर) या धीमी (महत्वपूर्ण डेटास्ट्रक्चर लगातार चारों ओर स्थानांतरित / स्कैन / चला जाता है और इसमें बहुत सारे पॉइंटर्स होते हैं)। हालांकि परीक्षण विंडोज़ पर थे, और इसलिए पीआईसी इष्टतमरण को बेंचमार्क नहीं किया गया था।

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

(*) एक छोटा ज्ञात तथ्य यह है कि एसएसई रजिस्ट्रारों की संख्या 64-बिट मोड में भी दोगुना हो जाती है

(**) कुछ साल पहले डॉ। डॉब्स के बारे में एक अच्छा लेख था।


9
2018-05-01 21:19





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

मैं जिस बारे में बात कर रहा हूं, उसके कुछ उदाहरणों के लिए वॉल्यूम 4, प्री-फास्किकल 1 ए पर एक नज़र डालें।


8
2017-09-25 12:36