2010-06-24 7 views
12

मैं वर्तमान में हमारे आवेदन बड़े पता जागरूकता बनाने की प्रक्रिया में हूं। जैसा कि अनुभव दिखाया गया है, ऐसा करने पर कुछ अप्रत्याशित गॉथस हैं। मैं इस पोस्ट को उन चरणों की पूरी सूची बनाने के लिए तैयार करता हूं जिन्हें लेने की आवश्यकता है।एप्लिकेशन को बड़ा पता पता करने के लिए क्या करना है?

विकास AMD Large Address Aware guide में सूचीबद्ध विचार एक अच्छा प्रारंभिक बिंदु प्रदान करते हैं लेकिन कोई भी पूर्ण तरह से कर रहे हैं:

निम्नलिखित कारणों से यह सुनिश्चित करें कि कोड 2GB से अधिक के पतों संभाल कर सकते हैं बनाने के लिए मदद मिलेगी:

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

इसलिए, सवाल यह है: चीजें हैं जो जब सी ++ Win32 देशी आवेदन बड़े पता वाकिफ करने के बाद किए जाने की आवश्यकता की पूरी सूची क्या है?

उत्तर

22
  • (स्पष्ट) का चयन समर्थन पता परियोजना संपत्तियों में 2 गीगाबाइट (/ LARGEADDRESSAWARE) से बड़ा: लिंकर/सिस्टम/बड़े पते की सभी सूचक subtractions
  • जांच सक्षम करें और परिणाम की पुष्टि एक प्रकार में संग्रहित है जो संभावित अंतर हो सकता है, या तुलना या अन्य संरचनाओं के साथ उन्हें प्रतिस्थापित कर सकते हैं - Detect pointer arithmetics because of LARGEADDRESSAWARE देखें)। नोट: सूचक तुलना एएमडी सलाह के विपरीत ठीक होनी चाहिए, इसका कोई कारण नहीं है कि इसे 4 जीबी मुद्दों का कारण क्यों होना चाहिए
  • सुनिश्चित करें कि आप नहीं मान रहे हैं कि पॉइंटर्स के पास बिट 31 शून्य है, किसी अन्य चीज़ के लिए बिट 31 का उपयोग करने का प्रयास न करें।
  • सभी GetCursorPos की जगह GetCursorInfo साथ कहता है - GetCursorPos fails with large addresses
  • PVOID64 PtrToPtr64 का उपयोग में सभी कार्य के लिए
  • देखते हैं, जैसे की जरूरत ReadFileScatter का उपयोग करते समय, ReadFileScatter remark section
+0

"सभी पॉइंटर घटकों को हटाएं" अत्यधिक देखें। एक सरणी के भीतर पॉइंटर्स पूरी तरह ठीक काम करते हैं। – MSalters

+0

@ सुमा: सूचक जोड़ ठीक नहीं हैं, क्योंकि 'LARGEADDRESSAWARE' सेट होने पर पॉइंटर परिवर्धन ओवरफ़्लो हो सकता है। –

+0

इसके अलावा: यहां चर्चा की गई तीसरे पक्ष के पुस्तकालयों के लिए देखें: http://stackoverflow.com/questions/2288728/ – Opmet

संबंधित मुद्दे

 संबंधित मुद्दे