क्या 64-बिट मशीनों पर 64-बिट के बजाय 32-बिट सॉफ़्टवेयर चलाने का एक अच्छा कारण है?


56

क्या 64-बिट हार्डवेयर पर आधुनिक 64-बिट ऑपरेटिंग सिस्टम चलाने वाले आधुनिक डेस्कटॉप मशीनों पर लक्षित किसी भी सॉफ़्टवेयर के 64-बिट संस्करण के साथ 32-बिट संस्करण की आपूर्ति करने का कोई अच्छा कारण है?

ऐसा लगता है कि 64-बिट सॉफ़्टवेयर अधिक कुशल होगा, यदि आवश्यक हो तो उच्च मेमोरी उपयोग की अनुमति दें, आदि। ऐप्पल अपने फोन के लिए 64-बिट प्रोसेसर का उपयोग करता है, भले ही उनके पास 1-2 जीबी रैम हो, 4 जीबी से नीचे का रास्ता। 32-बिट सीपीयू के लिए सीमा।


16
प्रत्येक आधुनिक मशीन
बैलिंट

4
क्या आपके पास कोई उदाहरण है?
फिलीप हगलुंड

8
अपने ग्राहकों से पूछें।
मर्फी

22
अलंकारिक प्रश्न: किसी भी सॉफ्टवेयर के 64 बिट संस्करण की आपूर्ति करने का एक कारण है क्योंकि अधिकांश आधुनिक 64 बिट ऑपरेटिंग सिस्टम 32 बिट और 64 बिट अनुप्रयोगों को भी चलाने की अनुमति देते हैं?
डॉक ब्राउन

2
डुप्लीकेट @gnat नहीं। यह सवाल टाइमस्टैम्प को फिट करने के बारे में है, और जब प्रोग्राम से बाहर निकलता है तो त्रुटि कोड में एक डेवलपर आईडी वापस आ जाती है।
फिलीप हगलुंड

जवाबों:


80

64-बिट वातावरण में 32-बिट सॉफ़्टवेयर के लाभ

  • कम स्मृति पदचिह्न, विशेष रूप से सूचक-भारी अनुप्रयोगों में, 64-बिट बनाम 32-बिट आसानी से मेमोरी आवश्यकताओं को दोगुना कर सकते हैं।
  • ऑब्जेक्ट फ़ाइलें भी छोटी हैं।
  • 32-बिट वातावरण के साथ संगतता।
  • मेमोरी लीक 2 जीबी, 3 जीबी, या 4 जीबी के लिए कठिन हैं और पूरे सिस्टम को स्वाइप नहीं करेंगे।

64-बिट वातावरण में 32-बिट सॉफ़्टवेयर की कमियां

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

अन्य पहलू

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

जब तक एक बहुत विशिष्ट सीपीयू वास्तुकला, ऑपरेटिंग सिस्टम और लाइब्रेरी इन्फ्रास्ट्रक्चर की तुलना नहीं की जाती है, तब तक मैं अधिक विवरण में नहीं जा पाऊंगा।


8
"64 बिट सीपीयू वास्तुकला भी 32 बिट का समर्थन नहीं कर सकता है।" क्या यह एक सैद्धांतिक चिंता का विषय है, या क्या यह दुनिया में मौजूद है?
मुशाहो

10
@ मूकाहो निश्चित रूप से 64-बिट सीपीयू आर्किटेक्चर हैं, जैसे कि अल्फा और आईए 64। हालांकि ये दोनों रुग्ण हैं। मैं अपने सिर के ऊपर से नहीं जानता कि क्या वर्तमान में 64-बिट-केवल आर्किटेक्चर - AArch64, हो सकता है? क्या किसी को पता है कि 32-बिट एआरएम इसका एक अनिवार्य घटक है?
zwol

10
@zwol नहीं, 32-बिट ARM के लिए अनिवार्य नहीं है, और न ही 64-बिट है। केवल 64-बिट एआरएम सीपीयू हैं, जबकि अन्य 32-बिट और 64-बिट दोनों प्रक्रियाओं का समर्थन करते हैं।
Ext3h

3
केवल एक वास्तुकला को चुनने और उससे चिपके रहने का एक अतिरिक्त लाभ है: सरल विकास और परीक्षण।
jl6

7
@ जोशुआ हमेशा मौजूद रहे? क्या फ़िरौनों को इसकी जानकारी थी?
candied_orange 22

7

32 बिट सॉफ़्टवेयर और 64 बिट सॉफ़्टवेयर के बीच का अंतर पॉइंटर्स का आकार और शायद पूर्णांक रजिस्टरों का आकार है। बस।

इसका मतलब है कि आपके प्रोग्राम के सभी पॉइंटर्स आकार से दोगुने हैं। और (कम से कम ILP32 / LP64 आर्किटेक्चर पर) आपके longएस आकार से दोगुने हैं। यह आमतौर पर ऑब्जेक्ट कोड आकार में लगभग 30% वृद्धि के लिए काम करता है। इस का मतलब है कि …

  • आपका ऑब्जेक्ट कोड RAM से डिस्क में लोड होने में ~ 30% अधिक समय लेगा
  • आपका ऑब्जेक्ट कोड मेमोरी में ~ 30% अधिक स्थान लेगा
  • आपने अपनी मेमोरी बैंडविड्थ (ऑब्जेक्ट कोड के लिए) को ~ 20% तक प्रभावी रूप से कम कर दिया है
  • आपने निर्देश कैश का आकार ~ 20% तक प्रभावी रूप से कम कर दिया है

इससे प्रदर्शन पर एक नगण्य नकारात्मक प्रभाव पड़ता है।

ऐसा करने से ही समझ में आता है अगर आप किसी भी तरह से उन प्रदर्शन लागतों को "वापस खरीद सकते हैं"। मूल रूप से, ऐसा करने के दो तरीके हैं: आप 64 बिट पूर्णांक गणित करते हैं, या आपको 4 से अधिक GiByte मैप्ड मेमोरी की आवश्यकता होती है। यदि उनमें से एक या दोनों सत्य हैं, तो 64 बिट सॉफ़्टवेयर का उपयोग करना समझ में आता है, अन्यथा यह नहीं है।

नोट: कुछ ऐसे आर्किटेक्चर हैं जहां 32 या 64 बिट वेरिएंट नहीं हैं। उस मामले में, सवाल स्पष्ट रूप से समझ में नहीं आता है। सबसे प्रसिद्ध IA64 हैं, जो केवल 64 बिट है और जिसका कोई 32 बिट संस्करण नहीं है, और x86 / AMD64 जो निकट से संबंधित हैं, विभिन्न आर्किटेक्चर हैं, x86 केवल 32 बिट, AMD64 केवल 64 बिट है।

दरअसल, वह बाद का बयान अब 100% सच नहीं है। लिनक्स ने हाल ही में x32 ABI को जोड़ा है, जो आपको 32 बिट बिंदुओं के साथ AMD64 कोड चलाने की अनुमति देता है, इसलिए भले ही यह "उचित" सीपीयू वास्तुकला नहीं है, यह AMD64 वास्तुकला का इस तरह से उपयोग करने का एक तरीका है जैसे कि यह एक मूल था 32 बिट संस्करण। यह ठीक किया गया था क्योंकि प्रदर्शन भूमि के ऊपर मैं उपर्युक्त पैदा कर रहा था वास्तविक वास्तविक दुनिया प्रणालियों में वास्तविक दुनिया कोड चलाने वास्तविक दुनिया उपयोगकर्ताओं के लिए औसत दर्जे का, मात्रात्मक समस्याओं।


8
X86 की तुलना में amd64 में अतिरिक्त रजिस्टरों और निर्देशों के बारे में क्या? प्रदर्शन में कितना सुधार होता है?
फिलिप हगलुंड

2
MacOS X और iOS पर ऑब्जेक्टिव-सी में प्रयुक्त "टैग किए गए पॉइंटर्स" के लिए Google। बहुत अधिक मात्रा में वस्तुओं के पास कोई मेमोरी आवंटित नहीं की गई है लेकिन पूरी वस्तु 64 बिट सिस्टम पर पॉइंटर के भीतर नकली है। (मैंने सुना है कि जावा कुछ ऐसा ही करता है)। C ++ में, 64 बिट पर std :: स्ट्रिंग में अक्सर 22 अक्षर तक का ऑब्जेक्ट होता है, बिना किसी मेमोरी एलोकेशन के। पर्याप्त स्मृति बचत और गति में सुधार।
gnasher729 13

3
पॉइंटर्स और पूर्णांक का आकार यह है? अधिकांश 64 बिट आर्किटेक्चर में बड़े पते की जगह और अतिरिक्त रजिस्टरों के बारे में क्या?

1
"आपने [20% कम कर दिया है] अनुदेश कैश को कम कर दिया है" क्योंकि निर्देश सेट पूरी तरह से अलग है (और अक्सर अधिक कुशल)
ब्लूराजा - डैनी पीफ्लुगुफ्ट

3
"इससे प्रदर्शन पर एक नगण्य नकारात्मक प्रभाव पड़ता है।" हालांकि यह कथन एक पूर्ण अर्थ में सच है, यह इस तथ्य की अनदेखी करता है कि अनुप्रयोगों के प्रदर्शन के विशाल, विशाल बहुमत लोड लोड, या मेमोरी उपयोग / बैंडविड्थ, या कैश में निर्देशों की संख्या में नहीं हैं।
इयान केम्प

6

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

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


2
आप विंडोज और लिनक्स दोनों में एक ही प्रक्रिया में 32 बिट और 64 बिट का मिश्रण कर सकते हैं : stackoverflow.com/q/12716419/703382
नवीन

1
@ नवीन: लेकिन क्या यह व्यावहारिक है? क्या आप 64-बिट विंडोज एप्लिकेशन में एक COM घटक का उपयोग कर सकते हैं (उदाहरण के लिए। NET एप्लिकेशन को किसी भी सीपीयू के रूप में चिह्नित किया गया है जो विंडोज के 64-बिट संस्करण पर चल रहा है)?
पीटर मोर्टेनसेन

3

अपने सॉफ्टवेयर एक DLL है, तो आप चाहिए 32-बिट और 64-बिट संस्करण प्रदान करते हैं। आपको पता नहीं है कि ग्राहक DLL से बात करने के लिए 32-बिट या 64-बिट सॉफ़्टवेयर का उपयोग करेगा या नहीं, और DLL को एप्लिकेशन के समान बिट-लंबाई का उपयोग करना होगा। यह गैर-परक्राम्य है।

यदि आपका सॉफ़्टवेयर एक स्टैंडअलोन निष्पादन योग्य है, तो यह कम स्पष्ट है। यदि आपको पुराने OS पर चलने के लिए अपने सॉफ़्टवेयर की आवश्यकता नहीं है, तो आपको 32-बिट संस्करण प्रदान करने की आवश्यकता नहीं हो सकती है। बस 64-बिट से चिपके रहें, यह निर्दिष्ट करें कि इसके लिए 64-बिट OS की आवश्यकता है, और काम किया है।

हालाँकि अगर आपको अपने सॉफ़्टवेयर को पुराने OS पर चलाने की आवश्यकता है तो आप सक्रिय रूप से 64-बिट संस्करण प्रदान नहीं करना चाहते हैं। यदि आपके पास दो संस्करण हैं, तो आपके पास परीक्षण दोगुना है, और ओएस संस्करणों और भाषाओं की एक पूरी श्रृंखला में सॉफ्टवेयर का ठीक से परीक्षण एक त्वरित प्रक्रिया नहीं है। चूंकि 32-बिट सॉफ़्टवेयर 64-बिट प्लेटफ़ॉर्म पर पूरी तरह से खुशी से चलता है, यह अभी भी सॉफ़्टवेयर के लिए केवल 32-बिट के रूप में जारी करने के लिए काफी सामान्य है, खासकर छोटे डेवलपर्स द्वारा।

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


मैं कम परीक्षण पर आपकी स्थिति के खिलाफ तर्क दूंगा। इसके बजाय मैं कई प्लेटफार्मों पर विशेष रूप से न केवल विभिन्न रजिस्टर आकारों के साथ परीक्षण करने का तर्क दूंगा, बल्कि अलग-अलग बाइट के आदेशों के साथ परीक्षण को बढ़ाने और सूक्ष्म त्रुटियों को पकड़ने का एक आसान तरीका भी होगा। इसके अलावा, मैं उन कंप्यूटरों पर भी परीक्षण करूंगा जो आपकी अनुशंसित न्यूनतम हार्डवेयर आवश्यकताओं को पूरा नहीं करते हैं क्योंकि यह अतिरिक्त मुद्दों को भी उजागर करेगा जो कि बहुत बड़े डेटा सेटों को छोड़कर अन्यथा नहीं दिखा सकते हैं।
hildred

@ असीमित परीक्षण संसाधन के साथ, मैं सहमत हूँ। व्यवहार में, यदि आप अपने लक्ष्य पर अधिक नियंत्रण में हैं, तो आपको तुरंत इस परीक्षण को करने की आवश्यकता नहीं हो सकती है। यह या तो "आसान तरीका" नहीं है - यह सुनिश्चित करने के लिए कि आप वीएम में इन प्लेटफार्मों में से कुछ का अनुकरण कर सकते हैं, लेकिन यदि आपको भौतिक हार्डवेयर सेट करने की आवश्यकता है, तो इसमें बड़ी मात्रा में मैनुअल (गैर-स्वचालित) कार्य शामिल है। यह स्पष्ट रूप से परीक्षण करने के लिए आपको टेस्ट हार्नेस लिखने से बचा सकता है, लेकिन यह किसी भी तरह से मुक्त नहीं है।
ग्राहम

1
मुक्त नहीं है, लेकिन सर्वथा सस्ता है। यदि आप अपने प्लेटफ़ॉर्म परीक्षण को स्वचालित परीक्षणों तक सीमित करते हैं, तो कभी-कभार बेवकूफ परीक्षण, आपके सेटअप से हार्डवेयर असाइड का उपयोग सफल परीक्षणों के लिए आपकी लागतों के बाद करता है, जब आपका प्रारंभिक सेटअप पावर और लगभग 7 मैन मिनट प्रति परीक्षण पास होगा। विफल परीक्षणों की लागत निश्चित रूप से अधिक होगी, लेकिन वे आमतौर पर अधिक मूल्य के होंगे (हमेशा हार्डवेयर विफलता होती है)। इस प्रकार का सेटअप प्रोग्रामर के लिए विशेष रूप से उपयोगी है क्योंकि यह आसानी से पॉइंटर समस्याओं की एक निश्चित श्रेणी को उजागर करता है जो अन्यथा नीचे ट्रैक करना मुश्किल है।
१५:१६ hildred
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.