अधिकांश सॉफ्टवेयर 32 और 64 बिट इंटेल / एएमडी आर्किटेक्चर दोनों के लिए संकलित होने पर समान काम करेंगे। हालांकि, कुछ सॉफ्टवेयर नहीं होगा। आलस से, या बड़े दर्शकों तक पहुंचने के बावजूद, कुछ विशिष्ट कारण हैं कि 64 बिट के रूप में फिर से काम करने से काम नहीं चलेगा।
सॉफ़्टवेयर असुरक्षित पॉइंटर ऑपरेशन का उपयोग कर सकता है। शायद एक प्रोग्राम एक पॉइंटर को एक इंट में डालता है, जो आमतौर पर अधिकांश सी और सी ++ कंपाइलरों के लिए 32 बिट है। 64 बिट प्रोग्राम में पॉइंटर्स 64 बिट्स हैं। वह काम नहीं करता।
यदि भिन्न प्रकार का उपयोग किया जा रहा है तो बिट शिफ्ट ऑपरेशन अलग परिणाम उत्पन्न कर सकता है। यह एक मानक टाइपएड की बजाय नियमित डेटा प्रकार का उपयोग करते समय एक समस्या हो सकती हैint32_t
संघ में उपयोग किया जाने वाला डेटा प्रकार, संघ के व्यवहार को बदलते हुए आकार बदल सकता है।
सॉफ्टवेयर उन पुस्तकालयों पर निर्भर हो सकता है जो केवल 32-बिट हैं। सामान्य तौर पर, एक 64 बिट प्रोग्राम केवल स्टैक, पॉइंटर्स, आदि के बारे में मान्यताओं के कारण 64 बिट पुस्तकालयों के साथ काम करेगा।
आपके प्रश्न के बारे में पूछने में कठिनाई बस यह है कि कुछ कोड बेस में लाखों कोड हो सकते हैं जो असुरक्षित संचालन करते हैं, असुरक्षित धारणाएं बनाते हैं, डेवलपर्स द्वारा डाले गए शॉर्टकट और "अनुकूलन" हैं। कोड या तो 64 बिट वातावरण में संकलित नहीं होगा, या यह शो-स्टॉपर बग को संकलित करेगा। सभी मुद्दों को ठीक करने में लंबा समय लग सकता है। हो सकता है कि कोई कंपनी उन्हें समय के साथ ठीक कर दे जब तक कि 64 बिट संस्करण को जारी करना संभव न हो। हो सकता है कि कोई कंपनी वर्तमान रखरखाव रिलीज़ के साथ "संस्करण 2" विकसित करेगी क्योंकि कुल पुनर्लेखन आवश्यक है।
कहानी का नैतिक स्वच्छ कोड लिखना है और संकलक को दूसरे-अनुमान लगाने या चालाक अनुकूलन जोड़ने की कोशिश न करें जो आवश्यक नहीं हैं, सॉफ़्टवेयर को तोड़ सकते हैं, और शायद वैसे भी मदद नहीं करते हैं।
यह लेख इस उत्तर में शामिल होने की उम्मीद से कहीं अधिक विस्तार में जाता है: 64-बिट प्लेटफॉर्म पर C ++ कोड को पोर्ट करने के 20 मुद्दे
sizeof(int)==sizeof(void*)