एक विशिष्ट कारण यह मुश्किल हो सकता है कि सूचक आकार अलग होने जा रहे हैं। 32 बिट्स लेने वाले पॉइंटर के बजाय, एक सूचक अब 64 बिट्स लेगा।
एक समस्या है कि अगर सॉफ्टवेयर कहीं सी में एक reinterpret_cast
++ (जो वास्तव में कुछ कम स्तर कोड में हो सकता है) के माध्यम से एक int
में एक सूचक shoehorns, और यह क्योंकि एक int
के आकार काम करने के लिए हुआ है और एक सूचक थे एक माप। असल में, कोड एक सूचक के लिए एक निश्चित आकार माना जाता है।
एक और तरीका है कि वापस काट सकते हैं, तो कोड 4
बजाय sizeof(void*)
, या 0xffffffff
बजाय INT_MAX
या कुछ इसी तरह की तरह जादू संख्या से अटे पड़े है।
सॉफ़्टवेयर का 64-बिट संस्करण नहीं हो सकता है यदि यह लाइब्रेरी या 64 बिट्स में उपलब्ध फ़ंक्शन पर निर्भर करता है। आपके पास कोई ऐसा एप्लिकेशन नहीं हो सकता है जो भाग 32 बिट्स और 64 बिट्स है। उदाहरण के लिए, विंडोज़ में, SetWindowLong
नामक एक फ़ंक्शन है जो केवल 32-बिट डेटा को स्वीकार कर सकता है, इसलिए यदि पॉइंटर को फ़ंक्शन में पास करने की आवश्यकता होती है तो यह 64-बिट प्रोग्राम के लिए बहुत उपयोगी नहीं है। यही कारण है कि SetWindowLongPtr
नामक एक फ़ंक्शन है जो 64-बिट प्रोग्राम में 64-बिट्स और 32-बिट प्रोग्राम में 32-बिट्स को संभाल सकता है।
ध्यान दें कि इंटरनेट एक्सप्लोरर 64-बिट विंडोज़ पर भी डिफ़ॉल्ट रूप से 32-बिट्स पर चलता है, क्योंकि इसके लिए प्लगइन का एक बड़ा बहुमत केवल 32-बिट्स में उपलब्ध है। इसका एक बड़ा उदाहरण the Adobe Flash Player है, जो केवल 32-बिट्स में उपलब्ध है। तो जाहिर है, एडोब जैसे एक बड़ी कंपनी के लिए भी, 64-बिट्स के लिए पोर्टिंग हमेशा तुच्छ नहीं हो सकता है।
बिट्सफ़िफ्टिंग परिचालन प्रभावित हो सकते हैं। उदाहरण के लिए, बिटर स्थानांतरण 0x80000
32 बिट्स में 10 बार छोड़ा गया है, आपको 0x0
देता है, लेकिन बिट बिटिंग 0x80000
64 बिट्स में 10 बार छोड़ा गया है आपको 0x200000000
देता है।
यह सब कहा जा रहा है कि कोई वास्तविक तकनीकी कारण नहीं है कि कोड को अच्छी तरह से लिखा गया था, तो 64-बिट पर एप्लिकेशन को पोर्ट करना मुश्किल है। सबसे अच्छा मामला यह है कि एक साधारण परियोजना पुनर्गठन और पूर्ण पुनर्निर्माण की आवश्यकता है।
मेरे क्रांतिकारी पक्ष का कहना है कि कंपनियां योजनाबद्ध अशुभता को लागू करने के लिए एक तरीके के रूप में इसका उपयोग करती हैं या लोगों को नए उत्पादों को अपग्रेड/खरीदने के लिए प्रोत्साहित करती हैं!
यदि आप एक अच्छा जवाब चाहते हैं तो आपको अधिक विशिष्ट होना चाहिए। उदाहरण के लिए, यह .NET अनुप्रयोगों के 64 बिट संस्करण बनाने के लिए दिमागी है - इसे किसी भी CPU या x64 के रूप में संकलित करने के लिए सेट करें। तो जाहिर है, आप .NET अनुप्रयोगों के बारे में बात नहीं कर रहे हैं, लेकिन आप किस बारे में बात कर रहे हैं? :) –
मैं सामान्य रूप से पूछ रहा हूं कि तकनीकी कारण क्या है जो स्पष्ट रूप से 32-बिट और 64-बिट ऐप्स बनाने के लिए सटीक उसी कोडबेस का उपयोग करना असंभव बनाता है। चूंकि यह केवल पुन: सम्मिलित होने के बारे में होगा, इसलिए सभी पुस्तकालय 64-बिट आदि के रूप में भी उपलब्ध होंगे, फिर सभी ऐप्स को 64-बिट -> यानी भी पुनः संकलित किया जा सकता है। कोई बात नहीं। – Tuminoid
"सभी गायब 64-बिट सॉफ़्टवेयर बस नहीं हो सकते क्योंकि लोग जादू संख्या वाले कोड पसंद करते हैं ?!" - 64 बिट सॉफ़्टवेयर में बहुत कुछ गायब हो सकता है क्योंकि इसकी आवश्यकता नहीं है। अगर कोई गलत है तो कृपया मुझे सही करें, लेकिन अंगूठे का नियम मैंने सुना है: जब तक कि आप संभावित रूप से 4 जीबी से अधिक स्मृति को संबोधित नहीं कर रहे हैं, तो आपको 32 बिट के रूप में संकलित करना चाहिए। –