x86-64 निर्देश सेट निष्पादन योग्य कोड को व्यवस्थित करने में सहायता के लिए अधिक रजिस्टरों और अन्य सुधारों को जोड़ता है। हालांकि, कई अनुप्रयोगों में वृद्धि सूचक आकार एक बोझ है। प्रत्येक पॉइंटर में अतिरिक्त, अप्रयुक्त बाइट कैश को दबाते हैं और यहां तक कि रैम ओवरफ्लो भी हो सकते हैं। जीसीसी, उदाहरण के लिए, -m32
ध्वज के साथ बनाता है, और मुझे लगता है कि यही कारण है।x86-64 आईएसए के साथ 32-बिट पॉइंटर्स: क्यों नहीं?
यह एक 32-बिट मूल्य लोड और एक सूचक के रूप में यह इलाज के लिए संभव है। इसके लिए अतिरिक्त निर्देशों की आवश्यकता नहीं है, बस 32 बिट्स को लोड/गणना करें और परिणामस्वरूप पते से लोड करें। यह चाल पोर्टेबल नहीं होगी, हालांकि, प्लेटफॉर्म के अलग-अलग मेमोरी मैप्स हैं। मैक ओएस एक्स पर, पता स्थान की पूरी कम 4 जीबी आरक्षित है। फिर भी, मैंने एक प्रोग्राम के लिए लिखा है, सचमुच 64-बिट पते पर बेहतर प्रदर्शन का उपयोग करने से पहले को 32-बिट "पते" में जोड़कर, -m32
के साथ संकलित करना।
वहाँ एक 32-बिट, x86-64 मंच होने के लिए किसी भी मौलिक बाधा है? मुझे लगता है कि इस तरह के चिमेरा का समर्थन किसी भी ऑपरेटिंग सिस्टम में जटिलता को जोड़ देगा, और कोई भी जो पिछले 20% चाहता है उसे सिर्फ इसे वर्क ™ बनाना चाहिए, लेकिन यह अभी भी लगता है कि यह विभिन्न कम्प्यूटेशनल गहन कार्यक्रमों के लिए सबसे अच्छा फिट होगा।
अधिकांश अनुप्रयोगों में प्रोफाइलिंग डेटा में संकेतक सूचक आकार में वृद्धि के कारण कोई महत्वपूर्ण नुकसान नहीं होता है। – Puppy
इंटेल संकलक विकल्प [ 'Qauto-ilp32'] (http://software.intel.com/sites/products/documentation/hpc/compilerpro/en-us/cpp/lin/compiler_c/copts/ccpp_options/option_qauto_ilp32 है एचटीएम) जो पॉइंटर्स के लिए 32-बिट्स का उपयोग करने के लिए "कोशिश करता है" - यहां तक कि x64 मोड में भी। – Mysticial
@ मिस्टिकियल लेकिन यह पुराने-पुराने 'नज़दीकी' और 'दूर' पॉइंटर्स की तरह है, है ना? यह समाधान ठीक है, मुझे लगता है, लेकिन यह उतना साफ नहीं है जितना मैं जिक्र कर रहा हूं। – Potatoswatter