24

जब कुलपति ++ के साथ कोड संकलन, MSDN आप x86_amd64 टूलसेट या amd64 टूलसेट का उपयोग कर (जब vcvarsall.bat बुला) के बीच विकल्प देता है।x64 कोड संकलित करते समय, "x86_amd64" और "amd64" के बीच क्या अंतर है?

मैं उन दो जब संकलन 64 कोड के बीच चुनाव कैसे करूं? क्या amd64 विकल्प क्रॉस कंपाइलर की तुलना में अधिक कुशल x64 मशीन कोड निकाल देगा?

उत्तर

22

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

मूल कंपाइलर केवल विंडोज की 64-बिट प्रतिलिपि पर चलाएगा, इसलिए यदि आपका वर्कस्टेशन 32-बिट है तो यह कंपाइलर भी नहीं चलाएगा।

क्रॉस-कंपाइलर x86 मशीनों पर चलाने के लिए है, भले ही यह विंडोज़ की 64-बिट प्रतिलिपि के माध्यम से चलाएगा; हालांकि, ऐसा करने का कोई कारण नहीं है।

पेज आप लिंक यह काफी अच्छी तरह से कहते हैं: 86 (64 पार संकलक) पर


की अनुमति देता है आप 64 के लिए उत्पादन फ़ाइलें बनाने के लिए। cl.exe के इस संस्करण में एक 32-बिट प्रक्रिया, एक 64-बिट विधवाओं ऑपरेटिंग सिस्टम पर एक x86 मशीन पर देशी और WOW64 नीचे के रूप में चलाता है। 64
पर

64 तुम उत्पादन 64 के लिए फ़ाइलें बनाने के लिए अनुमति देता है। Cl.exe का यह संस्करण x64 मशीन पर मूल प्रक्रिया के रूप में चलता है। बोली

7

आप क्या जुड़ा हुआ से: 86 (64 पार संकलक) पर


आप 64 के लिए उत्पादन फ़ाइलों को बनाने के देता है। cl.exe के इस संस्करण में एक 32-बिट प्रक्रिया, एक 64-बिट विधवाओं ऑपरेटिंग सिस्टम पर एक x86 मशीन पर देशी और WOW64 नीचे के रूप में चलाता है। 64
पर

64 तुम उत्पादन 64 के लिए फ़ाइलें बनाने के लिए अनुमति देता है। Cl.exe का यह संस्करण x64 मशीन पर मूल प्रक्रिया के रूप में चलता है।

भावानूदित:

आप x86_amd64 का उपयोग करते हैं, तो आप आम तौर पर एक x86 मशीन पर विकसित कर रहे हैं और आपको लगता है कि 64 पर मूल रूप से चलाने के 64 फ़ाइलें बनाना चाहते हैं। आप इस विकल्प का उपयोग x64 मशीन पर भी कर सकते हैं लेकिन आपका कंपाइलर WOW64 इम्यूलेशन के तहत चल रहा है।

आप AMD64 का उपयोग करते हैं, तो आप एक x64 मशीन पर विकसित कर रहे हैं और आपको लगता है कि 64 पर मूल रूप से चलाने के 64 फ़ाइलें बनाना चाहते हैं। संकलक x64 में मूल रूप से चल रहा है। यह विकल्प x64 प्रोग्राम बनाने के लिए अधिक कुशल है।

आप सोच रहे होंगे क्यों क्या तुमने कभी एक x86 कंप्यूटर पर एक 64 कार्यक्रम का विकास होता है, क्योंकि आप इसे नहीं चला सकते हैं आप इसे डिबग नहीं कर सकते। खैर यह अगर आप एक बिल्ड सर्वर जो है 86 और उस बिल्ड सर्वर दोनों x86 और x64 आउटपुट उत्पन्न करने के लिए की जरूरत है अभी भी उदाहरण के लिए उपयोगी है।

कैसे यह एक संकलक 64 के अंतर्गत चलाने के लिए अगर यह एक x86 आधारित कार्यक्रम (x86_amd64) है संभव है? यही कारण है कि आप अपने x64 मशीन पर किसी भी x86 प्रोग्राम चला सकते हैं ... WOW64 अनुकरण के लिए धन्यवाद।

WOW64 अनुकरण होता है जब आप एक x64 कंप्यूटर (या IA64) पर एक x86 कार्यक्रम चलाने:

WOW64 अनुकरण क्या है। WOW64 विंडोज 64 पर विंडोज 64 के लिए खड़ा है। यह x64 मशीनों के शीर्ष पर एक इम्यूलेशन परत है जो आपको x86 प्रोग्राम निष्पादित करने की अनुमति देता है।

आपका फाइल सिस्टम आपरेशन WOW64 फ़ोल्डरों पर पुनः निर्देशित किया जाएगा और अपने रजिस्ट्री के साथ-साथ एक उपनोड पुनः निर्देशित किया जाएगा। उदाहरण के लिए यदि आप फ़ोल्डर प्रोग्राम फ़ाइलों के लिए यह c:\program files (x86)\ वापसी अगर आप WOW64 उपयोग कर रहे हैं जाएगा प्राप्त करने के लिए कोशिश, लेकिन अगर आप 64 का उपयोग कर रहे यह c:\program files\ वापस आ जाएगी जब।

रजिस्ट्री के लिए एक और उदाहरण, यदि आप HKLM\Software\Something पर लिखने का प्रयास करते हैं तो यह वास्तव में आपको आपके x86 प्रोग्राम के ज्ञान के बिना HKLM\SOFTWARE\Wow6432Node\Something पर रीडायरेक्ट करेगा।

देशी x64 बिल्ड चलाना WOW64 अनुकरण के माध्यम से चलने से अधिक कुशल होगा क्यों? क्योंकि आपके पास 32 बिट कॉल में 64 बिट वाले लोगों को बदलने की अतिरिक्त अनुकरण परत नहीं है।

यदि आप विंडोज के x64 संस्करण चला रहे हैं तो आप देख सकते हैं कि WOW64 के माध्यम से कौन सी प्रक्रियाएं चल रही हैं क्योंकि उनके पास प्रक्रिया सूची में प्रक्रिया नाम में एक * 32 शामिल होगा।

+0

दोनों x86_amd64 और amd64 संस्करणों फ़ॉर्मेट करने के लिए Brian R. Bondy को

धन्यवाद बनाने के 64 मूल निष्पादनयोग्य जो दोनों एक 64-बिट ऑपरेटिंग सिस्टम पर एक देशी 64-बिट प्रक्रिया के रूप में चलाए जा सकें। WOW64 एक x64 ओएस पर 32-बिट मूल निष्पादन योग्य चलाने के लिए है। X86 कंपाइलर देशी 32-बिट निष्पादन योग्य उत्पन्न करेगा जो wow64 के अंतर्गत _would_ चलाएगा। – joshperry

+0

@ joshperry: मेरा संपादन देखें सहमत हैं। –

+0

@ BrianR.Bondy दिन में थोड़ा देर हो चुकी है लेकिन मैं अभी भी amd64_x86 विकल्प से उलझन में हूं। मैं समझता हूं कि यह टूलसेट (सीएल/लिंक) को 64-बिट प्रक्रियाओं के रूप में चलाने की अनुमति देता है। ठीक। लेकिन उत्पन्न बाइनरी x86 आर्किटेक्चर को लक्षित कर रहे हैं, सही? बाद का मतलब क्या है? Amd64_x86 द्वारा उत्पादित 64-बिट बाइनरी बेकार हैं? – ForeverLearning

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