32-बिट और 64-बिट सिस्टम के बीच अंतर क्या हैं?
यदि आपने दोनों का उपयोग किया है, तो आपने किस तरह के तेज अंतर का अनुभव किया है?
क्या कुछ मामलों में 64-बिट सिस्टम पर 32-बिट प्रोग्राम का उपयोग करना एक समस्या होगी?
32-बिट और 64-बिट सिस्टम के बीच अंतर क्या हैं?
यदि आपने दोनों का उपयोग किया है, तो आपने किस तरह के तेज अंतर का अनुभव किया है?
क्या कुछ मामलों में 64-बिट सिस्टम पर 32-बिट प्रोग्राम का उपयोग करना एक समस्या होगी?
जवाबों:
नोट: ये उत्तर मानक x86- आधारित पीसी सीपीयू (इंटेल और एएमडी) और विंडोज पर लागू होते हैं (जैसा कि आमतौर पर एंड-यूजर्स के लिए कॉन्फ़िगर किया गया है)। अन्य 32-बिट या 64-बिट चिप्स, अन्य OSes, और अन्य OS कॉन्फ़िगरेशन में अलग-अलग ट्रेडऑफ़ हो सकते हैं।
तकनीकी दृष्टिकोण से, 64-बिट OS आपको देता है:
व्यक्तिगत प्रक्रियाओं को प्रत्येक में 4 जीबी से अधिक रैम को संबोधित करने की अनुमति देता है (व्यवहार में, अधिकांश लेकिन सभी 32-बिट ओएस भी कुल उपयोग करने योग्य सिस्टम रैम को 4 जीबी से कम नहीं, केवल प्रति-एप्लिकेशन अधिकतम तक सीमित करते हैं)।
सभी संकेत 4 बाइट के बजाय 8 बाइट लेते हैं। RAM के उपयोग पर प्रभाव कम से कम है (क्योंकि आपके पास पॉइंटर्स के गीगाबाइट्स से भरा हुआ अनुप्रयोग होने की संभावना नहीं है), लेकिन सबसे खराब सैद्धांतिक स्थिति में, यह सीपीयू कैश को 1/2 को कई पॉइंटर्स रखने में सक्षम बना सकता है (मेकिंग यह प्रभावी रूप से 1/2 आकार हो सकता है)। अधिकांश अनुप्रयोगों के लिए, यह बहुत बड़ी बात नहीं है।
64-बिट मोड में कई और सामान्य-उद्देश्य वाले सीपीयू रजिस्टर हैं। रजिस्टर आपके पूरे सिस्टम में सबसे तेज़ मेमोरी हैं। 32-बिट मोड में केवल 8 और 64-बिट मोड में 16 सामान्य प्रयोजन रजिस्टर हैं। वैज्ञानिक कंप्यूटिंग अनुप्रयोगों में मैंने लिखा है, मैंने 64-बिट मोड में पुन: जमा करके 30% के प्रदर्शन को बढ़ावा दिया है (मेरा आवेदन वास्तव में अतिरिक्त रजिस्टरों का उपयोग कर सकता है)।
अधिकांश 32-बिट OSes वास्तव में केवल व्यक्तिगत अनुप्रयोगों को 2 जीबी रैम का उपयोग करने देते हैं, भले ही आपके पास 4 जीबी स्थापित हो। ऐसा इसलिए है क्योंकि अन्य 2 जीबी का पता स्थान ओएस के साथ, अनुप्रयोगों के बीच डेटा साझा करने और ड्राइवरों के साथ संवाद करने के लिए आरक्षित है। विंडोज़ और लिनक्स आपको इस ट्रेडऑफ़ को अनुप्रयोगों के लिए 3 जीबी और 1 जीबी साझा करने के लिए समायोजित करेंगे, लेकिन यह कुछ अनुप्रयोगों के लिए समस्या पैदा कर सकता है जो परिवर्तन की उम्मीद नहीं करते हैं। मैं यह भी अनुमान लगा रहा हूं कि यह एक ग्राफिक्स कार्ड को अपंग कर सकता है जिसमें 1 जीबी रैम है (लेकिन मुझे यकीन नहीं है)। 64-बिट OS व्यक्तिगत 32-बिट एप्लिकेशन को पूर्ण 4 जीबी के साथ खेलने के लिए दे सकता है।
उपयोगकर्ता के दृष्टिकोण से:
एप्लिकेशन की गति आमतौर पर 32-बिट OS पर एप्लिकेशन के 32-बिट संस्करण की तुलना में 64-बिट ओएस में 64-बिट अनुप्रयोग के लिए तेज़ है, लेकिन अधिकांश उपयोगकर्ता इस गति-अप को नहीं देखेंगे। सामान्य उपयोगकर्ताओं के लिए अधिकांश एप्लिकेशन वास्तव में अतिरिक्त रजिस्टरों का लाभ नहीं उठाते हैं या बड़े कैशर्स द्वारा कैश भरने से लाभ संतुलित होते हैं।
यदि आपके पास कोई मेमोरी हॉग एप्लिकेशन (जैसे फोटो एडिटर, वीडियो प्रोसेसिंग, साइंटिफिक कंप्यूटिंग, आदि) हैं, यदि आपके पास 3 जीबी से अधिक रैम है, और आप एप्लिकेशन का 64-बिट संस्करण प्राप्त कर सकते हैं, चुनाव आसान है: 64-बिट ओएस का उपयोग करें।
कुछ हार्डवेयर में 64-बिट ड्राइवर नहीं होते हैं। स्विच करने से पहले अपने मदरबोर्ड, सभी प्लग-इन कार्ड और सभी यूएसबी उपकरणों की जांच करें। ध्यान दें कि Windows Vista के शुरुआती दिनों में, ड्राइवरों के साथ बहुत सारी समस्याएं थीं। इन दिनों चीजें आम तौर पर बेहतर होती हैं।
यदि आप एक समय में इतने सारे एप्लिकेशन चलाते हैं कि आप RAM से बाहर चल रहे हैं (आमतौर पर आप यह बता सकते हैं क्योंकि आपका कंप्यूटर वास्तव में धीमा होने लगता है और आप हार्ड डिस्क ड्राइव को क्रंच करते हुए सुनते हैं), तो आप 64-बिट OS चाहते हैं (और पर्याप्त रैम)।
आप 64-बिट विंडोज में 32-बिट एप्लिकेशन (लेकिन ड्राइवर नहीं) चला सकते हैं जिसमें कोई समस्या नहीं है। 64-बिट विंडोज में 32-बिट एप्लिकेशन के लिए सबसे खराब मंदी मैंने लगभग 5% ली है (इसका मतलब है कि अगर 32-बिट विंडोज में कुछ करने के लिए 60 सेकंड लगते हैं, तो इसे 60 * 1.05 = 65 सेकंड में सबसे अधिक समय लगता है। 64-बिट विंडोज में समान 32-बिट एप्लिकेशन)।
32-बिट बनाम 64-बिट का क्या अर्थ नहीं है:
X86 सिस्टम पर, 32-बिट बनाम 64-बिट सीधे संकेत के आकार को संदर्भित करता है। बस इतना ही।
यह सी int
प्रकार के आकार को संदर्भित नहीं करता है । यह विशेष संकलक कार्यान्वयन द्वारा तय किया गया है, और अधिकांश लोकप्रिय संकलक int
64-बिट सिस्टम पर 32-बिट चुनते हैं।
यह सामान्य गैर-पॉइंटर रजिस्टरों के आकार को सीधे संदर्भित नहीं करता है । हालाँकि, 64-बिट अंकगणितीय रजिस्टरों के उपयोग के लिए यह आवश्यक है कि एप्लिकेशन और OS 64-बिट पॉइंटर मोड में भी चल रहे हों।
यह सीधे भौतिक पता बस के आकार को संदर्भित नहीं करता है । उदाहरण के लिए, 64 बिट वाइड कैश लाइनों और अधिकतम 512GiB मेमोरी वाले सिस्टम को अपने एड्रेस बस (यानी log2(512*1024**3) - log2(64) = 33
) में 33 बिट्स की आवश्यकता होती है ।
यह भौतिक डेटा बस के आकार को संदर्भित नहीं करता है: यह विनिर्माण लागत (सीपीयू सॉकेट में पिंस की संख्या) और कैश लाइन आकार से अधिक संबंधित है।
मूल रूप से आप सब कुछ बड़े पैमाने पर कर सकते हैं:
64-बिट आर्किटेक्चर के 2 बड़े प्रकार x64 और IA64 आर्किटेक्चर हैं। लेकिन x64 अब तक का सबसे लोकप्रिय है।
x64 x86 कमांड के साथ-साथ x64 कमांड चला सकते हैं। IA64 x86 कमांड भी चलाता है, लेकिन यह SSE एक्सटेंशन नहीं करता है। X86 निर्देशों को चलाने के लिए इटेनियम पर समर्पित हार्डवेयर है; यह एक एमुलेटर है, लेकिन हार्डवेयर में।
जैसा कि @Phil में बताया गया है कि आप यहाँ कैसे काम करते हैं, इसका गहन विवरण प्राप्त कर सकते हैं ।
लोगों को इस समय जो सबसे बड़ा प्रभाव दिखाई देगा वह यह है कि एक 32 बिट पीसी अधिकतम 4GB मेमोरी को ही संबोधित कर सकता है। जब आप ऑपरेटिंग सिस्टम द्वारा अन्य उपयोगों के लिए आवंटित मेमोरी को बंद कर देते हैं, तो आपका पीसी संभवतः केवल 3.25GB की बेकार मेमोरी दिखाएगा। 64 बिट पर जाएं और यह सीमा गायब हो जाती है।
यदि आपका गंभीर विकास हो रहा है तो यह बहुत महत्वपूर्ण हो सकता है। कई वर्चुअल मशीन चलाने की कोशिश करें और आप जल्द ही मेमोरी से बाहर हो जाएं। सर्वर को अतिरिक्त मेमोरी की आवश्यकता होती है और इसलिए आप पाएंगे कि 64 बिट का उपयोग डेस्कटॉप की तुलना में सर्वरों पर कहीं अधिक है। मूर का नियम यह सुनिश्चित करता है कि हमारे पास मशीनों पर कभी भी अधिक मेमोरी होगी और इसलिए कुछ बिंदुओं पर डेस्कटॉप मानक के अनुसार 64 बिट पर भी स्विच करेगा।
प्रोसेसर अंतर के अधिक विस्तृत विवरण के लिए, ArsTechnica के इस उत्कृष्ट लेख को देखें ।
कुछ भी मुफ्त नहीं है: हालांकि 64-बिट एप्लिकेशन 32-बिट अनुप्रयोगों की तुलना में अधिक मेमोरी तक पहुंच सकते हैं , नकारात्मक पक्ष यह है कि उन्हें अधिक मेमोरी की आवश्यकता है । उन सभी पॉइंटर्स को जिन्हें 4 बाइट्स की आवश्यकता थी, अब उन्हें 8. की आवश्यकता है। उदाहरण के लिए, Emacs में डिफ़ॉल्ट आवश्यकता 60% अधिक मेमोरी है जब यह 64-बिट आर्किटेक्चर के लिए बनाया गया है। यह अतिरिक्त पदचिह्न मेमोरी पदानुक्रम के हर स्तर पर प्रदर्शन को नुकसान पहुंचाता है: बड़े निष्पादन योग्य डिस्क से लोड होने में अधिक समय लेते हैं, बड़े काम करने वाले सेट अधिक पेजिंग का कारण बनते हैं और बड़ी वस्तुओं का मतलब प्रोसेसर कैश में कम फिट होता है। यदि आप 16K L1 कैश वाले CPU के बारे में सोचते हैं, तो एक 32-बिट एप्लिकेशन मिस होने से पहले 4096 पॉइंटर्स के साथ काम कर सकता है और L2 कैश में जा सकता है, लेकिन 64-बिट एप्लिकेशन को सिर्फ 2048 पॉइंटर्स के बाद L2 कैश के लिए पहुंचना होगा।
X64 पर यह अन्य आर्किटेक्चरल सुधारों जैसे अधिक रजिस्टरों द्वारा कम किया जाता है, लेकिन PowerPC पर यदि आपका एप्लिकेशन> 4G का उपयोग नहीं कर सकता है तो "ppc64" की तुलना में "ppc" पर तेजी से चलने की संभावना है। इंटेल पर भी x86 पर तेजी से चलने वाले वर्कलोड हैं, और कुछ x 64 की तुलना में x64 पर 5% से अधिक तेजी से चलते हैं।
64-बिट OS अधिक रैम का उपयोग कर सकता है। इसके बारे में, व्यवहार में है। 64-बिट विस्टा / 7, जहां वे रैम में महत्वपूर्ण घटक रखते हैं, के लिए कट्टर सुरक्षा सुविधाओं का उपयोग करते हैं, लेकिन यह वास्तव में 'ध्यान देने योग्य' नहीं है।
ChrisInEdmonton से:
PAE के साथ ix86 सिस्टम पर 32-बिट ऑपरेटिंग सिस्टम 64 जीबी तक रैम को संबोधित कर सकता है। X86-64 पर 64-बिट ऑपरेटिंग सिस्टम 256 टीबी के वर्चुअल एड्रेस स्पेस तक पहुंच सकता है, हालांकि इसे बाद के प्रोसेसर में 16 ईबी तक बढ़ाया जा सकता है। ध्यान दें कि कुछ ऑपरेटिंग सिस्टम एड्रेस स्पेस को और सीमित करते हैं, और अधिकांश मदरबोर्ड में अतिरिक्त प्रतिबंध होंगे।
यकीन नहीं है कि मैं आपके सभी सवालों के जवाब एक पूरे निबंध को लिखे बिना कर सकता हूं (यह हमेशा Google है ...), लेकिन आपको 64 बिट के लिए अपने ऐप को अलग तरीके से डिज़ाइन करने की आवश्यकता नहीं है। मुझे लगता है कि जो संदर्भित किया जा रहा है, वह यह है कि आपको चीजों से सावधान रहना होगा, जैसे कि पॉइंटर आकार अब चींटियों के समान आकार नहीं हैं। और आपके पास चार बाइट्स वाले कुछ प्रकार के डेटा पर इनबिल्ट मान्यताओं के साथ संभावित समस्याओं का एक पूरा भार है जो अब सच नहीं हो सकता है।
यह आपके आवेदन में सभी प्रकार की चीजों की यात्रा करने की संभावना है - फ़ाइल से बचत / लोडिंग से सब कुछ, डेटा के माध्यम से पुनरावृत्ति, डेटा संरेखण, डेटा पर बिटवाइज़ संचालन के सभी तरीके। यदि आपके पास एक मौजूदा कोडबेस है जिसे आप पोर्ट करने की कोशिश कर रहे हैं, या दोनों पर काम कर रहे हैं, तो संभावना है कि आपके पास काम करने के लिए बहुत कम निगल्स होंगे।
मुझे लगता है कि यह एक डिजाइन के बजाय एक कार्यान्वयन मुद्दा है। Ie मुझे लगता है कि कहने का "डिजाइन", एक फोटो एडिटिंग पैकेज वही होगा जो कुछ भी शब्द कहता है। हम कोड लिखते हैं जो 32 बिट और 64 बिट दोनों संस्करणों के लिए संकलित है, और निश्चित रूप से डिजाइन दोनों के बीच भिन्न नहीं है - यह एक ही कोडबेस है।
64 बिट पर मौलिक "बड़ा सौदा" यह है कि आप 32 बिट की तुलना में बहुत बड़े मेमोरी एड्रेस स्थान तक पहुंच प्राप्त करते हैं। इसका मतलब है कि आप वास्तव में अपने कंप्यूटर में 4 जीबी से अधिक मेमोरी में चक सकते हैं और वास्तव में इससे फर्क पड़ता है।
मुझे यकीन है कि अन्य उत्तर I से अधिक विवरण और लाभों में जाएंगे।
अंतर का पता लगाने के संदर्भ में, फिर प्रोग्रामिक रूप से आप केवल एक पॉइंटर (जैसे आकार) (शून्य *) के आकार की जांच करते हैं। 4 के जवाब का मतलब है इसके 32 बिट्स, और 8 का मतलब है कि आप 64 बिट के वातावरण में चल रहे हैं।
एक 32 बिट प्रक्रिया में 4 जीबी का वर्चुअल एड्रेस स्पेस होता है; यह कुछ ऐप्स के लिए बहुत कम हो सकता है। 64 बिट ऐप में वस्तुतः असीमित पता स्थान होता है (निश्चित रूप से यह सीमित है, लेकिन आप संभवतः इस सीमा को नहीं मारेंगे)।
OSX पर अन्य फायदे हैं। निम्न लेख देखें , क्यों 64 बिट एड्रेस स्पेस में कर्नेल रन होता है (भले ही आपका ऐप 64 या 32 रन करता हो) या आपके ऐप को 64 बिट एड्रेस स्पेस में चलाते हुए (जबकि कर्नेल अभी भी 32 बिट है) बहुत बेहतर प्रदर्शन की ओर ले जाता है। संक्षेप में: यदि 64 बिट (कर्नेल या ऐप या दोनों में से कोई एक) है, तो टीएलबी ("ट्रांसलेशन लुकसाइड बफर") को तब भी फ्लश नहीं करना होगा जब आप स्पेस और बैक का उपयोग करने के लिए कर्नेल से स्विच करेंगे (जो गति देगा ऊपर RAM पहुँच)।
"लंबे लंबे int" चर (64 बिट चर जैसे uint64_t) के साथ काम करने पर आपको प्रदर्शन लाभ होता है। एक 32 बिट सीपीयू दो 64 बिट मूल्यों को जोड़ / घटा / घटा / बढ़ा सकता है, लेकिन एक भी हार्डवेयर ऑपरेशन में नहीं। इसके बजाय इस ऑपरेशन को दो (या अधिक) 32 बिट ऑपरेशन में विभाजित करने की आवश्यकता है। तो 64 बिट नंबर के साथ बहुत काम करने वाले ऐप को हार्डवेयर में सीधे 64 बिट गणित करने में सक्षम होने की गति प्राप्त होगी।
अंतिम लेकिन कम से कम x86-64 आर्किटेक्चर क्लासिक x86 आर्किटेक्चर की तुलना में अधिक रजिस्टरों की पेशकश नहीं करता है। रजिस्टरों के साथ काम करना रैम के साथ काम करने की तुलना में बहुत तेज है और सीपीयू के पास जितना अधिक रजिस्टर है, उतनी ही बार इसे रैम और रजिस्टर में वापस रजिस्टर मूल्यों को स्वैप करने की आवश्यकता होती है।
यह पता लगाने के लिए कि आपका CPU 64 बिट मोड में चल सकता है, आप विभिन्न sysctl चर देख सकते हैं। जैसे एक टर्मिनल खोलें और टाइप करें
sysctl machdep.cpu.extfeatures
यदि यह EM64T को सूचीबद्ध करता है, तो आपका CPU x86-64 मानक के अनुसार 64 बिट पता स्थान का समर्थन करता है। आप भी देख सकते हैं
sysctl hw.optional.x86_64
यदि यह 1 (सच्चा / सक्षम) कहता है, तो आपका CPU x86-64 बिट मोड का समर्थन करता है, यदि यह 0 (गलत / अक्षम) कहता है, तो यह नहीं है। यदि सेटिंग बिल्कुल नहीं मिली है, तो इसे गलत मानें।
नोट: आप एक देशी C ऐप के भीतर से sysctl चर ला सकते हैं, कमांड लाइन टूल का उपयोग करने की कोई आवश्यकता नहीं है। देख
man 3 sysctl
ध्यान दें कि एड्रेसस्पेस का उपयोग (वास्तविक) मेमोरी से अधिक के लिए किया जा सकता है। कोई भी बड़ी फ़ाइलों को मेमोरी मैप कर सकता है, जो अधिक विषम एक्सेस पैटर्न में प्रदर्शन में सुधार कर सकता है क्योंकि अधिक शक्तिशाली और कुशल ब्लॉक-स्तरीय वीएम स्तर कैशिंग में किक करता है, यह भी 64-बिट पर बड़े मेमोरी ब्लॉक आवंटित करने के लिए सुरक्षित है क्योंकि हीपमानर कम है। पता-स्थान विखंडन का सामना करने की संभावना है जो इसे एक बड़े ब्लॉक को आवंटित करने की अनुमति नहीं देगा।
इस सूत्र में कही गई कुछ बातें (जैसे # रजिस्टर का दोहराव) केवल x86-> x86_64 पर लागू होती हैं, सामान्य रूप से 64-बिट पर नहीं। बस इस तथ्य की तरह कि x86_64 के तहत एक गारंटी में SSE2, 686 opcodes और PIC करने का एक सस्ता तरीका है। ये सुविधाएँ सख्ती से 64-बिट के बारे में नहीं हैं, लेकिन विरासत को काटने और ज्ञात x86 सीमाओं को हटाने के बारे में हैं
इसके अलावा अक्सर लोग स्पीडअप के कारण के रूप में रजिस्टरों को दोगुना करने की ओर इशारा करते हैं, जबकि यह अधिक संभावना है कि डिफ़ॉल्ट एसएसई 2 का उपयोग चाल (मेमरी और इसी तरह के कार्यों को तेज करना) करता है। यदि आप x86 के लिए समान सेट को सक्षम करते हैं तो अंतर छोटा होता है। (*) (***)
यह भी ध्यान रखें कि अक्सर एक प्रारंभिक जुर्माना शामिल होता है क्योंकि औसत डेटा संरचना केवल इसलिए बढ़ जाएगी क्योंकि एक सूचक का आकार बड़ा होता है। यह भी कैश प्रभाव है, लेकिन इस तथ्य में और अधिक उल्लेखनीय है कि औसत मेमची () या (जो भी मेमोरी कॉपी के बराबर है) आपकी भाषा में अधिक समय लगेगा। यह केवल कुछ प्रतिशत btw के परिमाण में है, लेकिन ऊपर नामित स्पीडअप भी उस परिमाण में हैं।
आमतौर पर संरेखण ओवरहेड 64-बिट आर्किटेक्चर पर भी बड़ा होता है (रिकॉर्ड 32-बिट पहले केवल अक्सर 32-बिट और 64-बिट मान का मिश्रण बन जाता है), संरचनाओं को और भी अधिक उड़ा देता है।
कुल मिलाकर, मेरे सरल परीक्षणों से पता चलता है कि वे लगभग एक-दूसरे को रद्द कर देंगे, अगर ड्राइवरों और रनटाइम लाइब्रेरी ने पूरी तरह से अनुकूलित किया है, जिससे औसत ऐप के लिए कोई महत्वपूर्ण गति अंतर नहीं है। हालाँकि कुछ ऐप अचानक तेज़ हो सकते हैं (जैसे जब एईएस पर निर्भर करता है) या धीमे (महत्वपूर्ण डेटास्ट्रक्चर को लगातार चारों ओर घुमाया / स्कैन / चलाया जाता है और बहुत सारे पॉइंटर्स होते हैं)। हालांकि परीक्षण विंडोज पर थे, और इसलिए PIC इष्टतमकरण को बेंचमार्क नहीं किया गया था।
ध्यान दें कि अधिकांश JIT-VM भाषाएँ (Java, .NET) उदाहरण के लिए C ++ की तुलना में औसतन (आंतरिक रूप से) अधिक महत्वपूर्ण बिंदुओं का उपयोग करती हैं। संभवतः उनका मेमोरी उपयोग औसत कार्यक्रम की तुलना में अधिक बढ़ जाता है, लेकिन मैं इसे धीमा करने के प्रभावों की बराबरी करने की हिम्मत नहीं करता हूं (क्योंकि ये वास्तव में जटिल और कायर जानवर हैं और अक्सर मापने के बिना भविष्यवाणी करना मुश्किल है)
SSE2 का उपयोग करने के लिए विंडोज 64-बिट डिफॉल्ट फ्लोटिंग पॉइंट के लिए जो सरल ऑपरेशन को गति देता है और कॉम्प्लेक्स (पाप, कॉस आदि) के संचालन को धीमा कर देता है।
(*) एक छोटा ज्ञात तथ्य यह है कि एसएसई रजिस्टरों की संख्या भी 64-बिट मोड में दोगुनी हो जाती है
(**) डॉ। डॉब्स ने कुछ साल पहले इसके बारे में एक अच्छा लेख लिखा था।
स्पष्ट मेमोरीस्पेस मुद्दों के अलावा जो अधिकांश लोग यहां उल्लेख कर रहे हैं, मुझे लगता है कि यह "ब्रॉडगॉर्ड कंप्यूटिंग" की धारणा को देखने के लायक है जो नूथ (अन्य के बीच) हाल ही में बोल रहा है। बिट हेरफेर के माध्यम से प्राप्त करने के लिए बहुत सारी प्रभावकारिताएं हैं, और 64-बिट शब्द पर बिटवाइज़ ऑपरेशन 32-बिट शब्द की तुलना में बहुत आगे जाते हैं। संक्षेप में, आप मेमोरी को हिट करने के बिना रजिस्टरों में अधिक संचालन कर सकते हैं, और प्रदर्शन के दृष्टिकोण से, यह एक बहुत बड़ी जीत है।
वॉल्यूम 4 पर एक नज़र डालें, मैं जिस शांत चाल के बारे में बात कर रहा हूं, उसके कुछ उदाहरणों के लिए पूर्व-फ़ासिकल 1 ए।
अधिक मेमोरी x86_64 को संबोधित करने की क्षमता के अलावा, अधिक रजिस्टरों को संकलक को अधिक कुशल कोड उत्पन्न करने की अनुमति देता है। प्रदर्शन में सुधार आमतौर पर हालांकि काफी छोटा होगा।
X86_64 आर्किटेक्चर x86 के साथ पीछे की ओर संगत है। अनमॉडिफाइड 32-बिट ऑपरेटिंग सिस्टम को चलाना संभव है। 64-बिट OS से अनमॉडिफाइड 32-बिट सॉफ़्टवेयर चलाना भी संभव है। हालांकि सभी सामान्य 32-बिट पुस्तकालयों की आवश्यकता होगी। उन्हें अलग से स्थापित करने की आवश्यकता हो सकती है।
यह धागा बहुत पहले से ही है, लेकिन ...
अधिकांश उत्तर इस तथ्य पर ध्यान केंद्रित करते हैं कि आपके पास एक बड़ा, 64-बिट पता स्थान है, इसलिए आप अधिक मेमोरी को संबोधित कर सकते हैं। सभी अनुप्रयोगों के लगभग 99% के लिए, यह पूरी तरह से अप्रासंगिक है। बड़ा हूप।
असली कारण 64-बिट अच्छा है नहीं कि रजिस्टरों बड़ी हो गई हैं, लेकिन उनमें से कई के रूप में दो बार कर रहे हैं! इसका मतलब है कि संकलक आपके मूल्यों को स्मृति में रखने और उन्हें कुछ निर्देशों में बाद में लोड करने के बजाय रजिस्टर में रख सकते हैं। अगर और जब एक अनुकूलन करने वाला कंपाइलर आपके लिए आपके छोरों को अनियंत्रित कर रहा है, तो यह उन्हें लगभग दो बार उतना ही नियंत्रित कर सकता है, जो वास्तव में प्रदर्शन में मदद कर सकता है।
इसके अलावा, 64-बिट के लिए सबरूटीन कॉलर / कैली कन्वेंशन को रजिस्टरों में पारित किए गए अधिकांश मापदंडों को रखने के लिए परिभाषित किया गया है, बजाय कॉल करने वाले को स्टैक पर धक्का दिए और कैली को बंद किए हुए।
तो एक "विशिष्ट" C / C ++ एप्लिकेशन को 64-बिट के लिए पुन: उपयोग करके लगभग 10% या 15% प्रदर्शन सुधार मिलेगा। (मान लें कि ऐप का कुछ हिस्सा गणना के लिए बाध्य था। बेशक, यह ग्वारेंटेड नहीं है; सभी कंप्यूटर समान गति की प्रतीक्षा करते हैं। आपका माइलेज मई वेरिए।)
पहले से उल्लेखित लाभों के अलावा यहां सुरक्षा के संबंध में कुछ और भी हैं:
एक और लाभ जो दिमाग में आता है वह यह है कि vmalloc()
लिनक्स कर्नेल के साथ आवंटित आभासी सन्निहित स्मृति की मात्रा 64 बिट मोड में बड़ी हो सकती है।
32-बिट मशीन के साथ आपके पास पता करने के लिए केवल 4,294,967,295 बाइट्स हैं। 64-बिट मशीन के साथ आपके पास 1.84467441 × 10 ^ 19 बाइट्स मेमोरी है।
64-बिट प्रोसेसर 32-बिट वातावरण में काम करने के रूप में दो बार के रूप में उपवास के रूप में विशेष कार्यों (जैसे बड़े आंकड़े के factorials) की गणना (दिए गए उदाहरण 32-बिट और 64-बिट विंडोज कैलकुलेटर के बीच तुलना से ली गई है; )। यह 64-बिट अनुकूलित अनुप्रयोगों की सैद्धांतिक संभावनाओं की एक सामान्य भावना देता है।
जबकि 64-बिट आर्किटेक्चर निर्विवाद रूप से डिजिटल वीडियो, वैज्ञानिक कंप्यूटिंग, और बड़े डेटाबेस जैसे अनुप्रयोगों में बड़े डेटा सेट के साथ काम कर रहे हैं, वहाँ इस बात पर काफी बहस हुई है कि क्या वे या उनके 32-बिट संगतता मोड तुलनात्मक रूप से कीमत से अधिक तेज़ होंगे अन्य कार्यों के लिए 32-बिट सिस्टम। X86-64 आर्किटेक्चर (AMD64) में, 32-बिट ऑपरेटिंग सिस्टम और एप्लिकेशन के अधिकांश भाग 64-बिट हार्डवेयर पर आसानी से चलने में सक्षम हैं।
सूर्य की 64-बिट जावा वर्चुअल मशीनें अपने 32-बिट वर्चुअल मशीनों की तुलना में धीमी गति से शुरू होती हैं क्योंकि सन ने केवल 64-बिट प्लेटफार्मों के लिए "सर्वर" JIT कंपाइलर (C2) को लागू किया है। [९] "क्लाइंट" JIT कंपाइलर (C1), जो कम कुशल कोड का उत्पादन करता है, लेकिन बहुत तेजी से संकलित करता है, 64-बिट प्लेटफार्मों पर उपलब्ध नहीं है।
यह ध्यान दिया जाना चाहिए कि 32-बिट और 64-बिट प्रोसेसर की तुलना में विचार करने के लिए गति एकमात्र कारक नहीं है। मल्टी-टास्किंग, स्ट्रेस टेस्टिंग और क्लस्टरिंग (हाई-परफॉर्मेंस कंप्यूटिंग के लिए), एचपीसी जैसे एप्लिकेशन 64-बिट आर्किटेक्चर के लिए अधिक उपयुक्त हो सकते हैं, जो सही परिनियोजन दिया गया है। 64-बिट क्लस्टर को आईबीएम, एचपी और माइक्रोसॉफ्ट जैसे बड़े संगठनों में व्यापक रूप से तैनात किया गया है।
Microsoft.com से उद्धरण:
निम्न तालिका में, कंप्यूटर के बढ़े हुए अधिकतम संसाधन जो कि विंडोज़ के 64-बिट संस्करणों पर आधारित हैं और 64-बिट इंटेल प्रोसेसर की तुलना मौजूदा 32-बिट संसाधन मैक्सिमम के साथ की जाती है।
क्रिस्टोफ़ और पोशी ने 32 और 64 बिट ओएस के बीच मुख्य तकनीकी अंतर को बताया है 'उपयोगकर्ता का अनुभव आमतौर पर सिद्धांत से बहुत अलग होता है। Windows के 64 बिट उपभोक्ता संस्करण (XP और Vista) में उनके ड्राइवर समर्थन में बड़े अंतराल छेद हैं। मेरे पास कई प्रिंटर, स्कैनर, और अन्य बाहरी उपकरण हैं जो फ्लैट 64 बिट संस्करणों के साथ काम नहीं करते हैं जो 32 बिट संस्करणों के साथ ठीक काम करते हैं। ये ऐसे उपकरण हैं जिनमें 64 बिट ड्राइवर थे और वे अभी भी काम नहीं करेंगे। इस बिंदु पर मैं आपको कुछ भी आधारित उपभोक्ता से दूर रहने की सलाह दूंगा जो Microsoft से 64 बिट है जब तक आप यह नहीं सुनते कि विंडोज 7 इसे कैसे संभालता है, वास्तविक अंत-उपयोगकर्ताओं से, न कि केवल uber-geeks से, जिनके पास वर्तमान में इसकी पहुंच है। इसे कम से कम 6 महीने दें और देखें कि लोग क्या अनुभव कर रहे हैं।
कुछ खेल-खेल कार्यक्रम बिट-बोर्ड प्रतिनिधित्व का उपयोग करते हैं। उदाहरण के लिए शतरंज, चेकर्स और ओथेलो में 8x8 बोर्ड है, यानी 64 वर्ग, इसलिए मशीन शब्द में कम से कम 64 बिट्स होने से प्रदर्शन में मदद मिलती है।
मुझे एक शतरंज कार्यक्रम के बारे में पढ़ना याद है जिसका 64-बिट बिल्ड 32-बिट संस्करण के रूप में लगभग दोगुना था।
32-बिट और 64-बिट शब्द एक कंप्यूटर प्रोसेसर (जिसे सीपीयू भी कहा जाता है) को संदर्भित करता है, जानकारी को संभालता है। विंडोज के 64-बिट संस्करण 32-बिट सिस्टम की तुलना में बड़ी मात्रा में रैंडम एक्सेस मेमोरी (रैम) को प्रभावी ढंग से संभालते हैं।
मेरी राय में गति अलग हो सकती है
Microsoft विंडोज के संबंध में एक और बात यह है कि कई वर्षों से Win32 एपीआई है जो 32-बिट ऑपरेटिंग सिस्टम के लिए अभिप्रेत है और 64 बिट संकलन के लिए अनुकूलित नहीं है। जब मैं अपने अनुप्रयोगों के लिए कुछ DLL लिखता हूं, तो मैं आमतौर पर Win32 में संकलन करता हूं जो कि 64 बिट संस्करण नहीं है। विस्टा से पहले, विंडोज के कई सफल 64 बिट संस्करण नहीं हुए हैं, मेरा मानना है कि जहां मैं काम करता हूं, वहां मेरी नई मशीन में 4 जीबी रैम है, लेकिन मैं अभी भी 32-बिट विंडोज एक्सपी प्रो का उपयोग कर रहा हूं क्योंकि यह एक ज्ञात स्थिर ओ है / XP64 या Vista के सापेक्ष।
मुझे लगता है कि आप यह भी देखना चाह सकते हैं कि जब 16-बिट से 32-बिट में शिफ्ट हुआ था, तो कुछ और डिटेल्स के लिए यह शिफ्ट कुछ लोगों के लिए बड़ी बात क्यों हो सकती है। मिशन-क्रिटिकल एप्लिकेशन जो एक कंपनी डेस्कटॉप पर चल सकती है, जैसे छोटे अकाउंटिंग पैकेज, 64-बिट ऑपरेटिंग सिस्टम पर नहीं चल सकते हैं और इस तरह एक विरासत मशीन को वर्चुअल या रियल के आसपास रखने की आवश्यकता है।
एक पते के आकार को बदलने से कुछ बड़े प्रभाव और नतीजे हो सकते हैं।
अधिकांश व्यावहारिक उद्देश्यों के लिए आप शायद अंतर नहीं देखेंगे।
64-बिट ऑपरेटिंग सिस्टम को स्थापित करने के लिए आपके पास 64-बिट CPU (पिछले कुछ वर्षों में अधिकांश CPU) होना चाहिए।
64-बिट ऑपरेटिंग सिस्टम के लिए कुछ फायदे हैं:
अधिकांश परिदृश्यों में, 64-बिट प्रोग्राम थोड़ी अधिक मेमोरी का उपयोग करते हैं, लेकिन व्यक्तिगत कंप्यूटर के लिए, यह आमतौर पर ध्यान नहीं दिया जाता है।