.net विजुअल स्टूडियो "कोई सीपीयू" लक्ष्य का क्या अर्थ है?




visual-studio-2008 build (7)

किसी भी सीपीयू का मतलब है कि यह किसी भी मंच पर काम करेगा। ऐसा इसलिए है क्योंकि प्रबंधित कोड जावा के समान है। इसे बाइट कोड में संकलित करने के रूप में सोचें जिसे रन-टाइम पर .NET Framework द्वारा व्याख्या किया गया है।

सी ++ में यह विकल्प नहीं है क्योंकि यह मशीन कोड के लिए संकलित है जो मंच विशिष्ट है।

मुझे विजुअल स्टूडियो 2008 में .NET प्लेटफ़ॉर्म बिल्ड विकल्पों से संबंधित कुछ भ्रम है।

"कोई भी CPU" संकलन लक्ष्य क्या है, और यह किस प्रकार की फाइलें उत्पन्न करता है? मैंने इस "किसी भी सीपीयू" के निष्पादन योग्य आउटपुट की जांच की और पाया कि वे x86 निष्पादन योग्य हैं (जो आने वाले नहीं देख पाएंगे!)। तो, x86 बनाम "कोई भी CPU" निष्पादन योग्य लक्ष्यीकरण के बीच कोई अंतर है?

एक और चीज जिसे मैंने देखा, यह है कि प्रबंधित सी ++ परियोजनाओं में इस मंच को एक विकल्प के रूप में नहीं है। ऐसा क्यों है? क्या इसका मतलब यह है कि "किसी भी CPU" निष्पादन योग्य सादे 32-बिट वाले के बारे में मेरा संदेह सही है?


मुझे लगता है कि अधिकांश महत्वपूर्ण चीजें कहा गया है, लेकिन मैंने सोचा कि मैं एक चीज़ जोड़ूंगा
यदि आप किसी भी CPU के रूप में संकलित करते हैं और x64 प्लेटफ़ॉर्म पर चलते हैं, तो आप 32-बिट डीएलएस लोड नहीं कर पाएंगे, क्योंकि आपका ऐप WOW64 में शुरू नहीं हुआ था, लेकिन उन डीएलएस को वहां चलाने की आवश्यकता है।
यदि आप x86 के रूप में संकलित करते हैं, तो x64 सिस्टम आपको WOW64 में चलाएगा, और आप 32-बिट डीएलएस लोड करने में सक्षम होंगे।
तो मुझे लगता है कि यदि आप निर्भरता किसी भी वातावरण में चला सकते हैं, तो आपको "कोई भी CPU" चुनना चाहिए, लेकिन यदि आपके पास 32-बिट निर्भरता है तो x86 चुनें। माइक्रोसॉफ्ट से यह आलेख थोड़ा सा बताता है:

/ CLRIMAGETYPE (सीएलआर छवि का प्रकार निर्दिष्ट करें)


मैं इस पोस्ट को पढ़ने की सलाह देते हैं

AnyCPU का उपयोग करते समय, अर्थशास्त्र निम्नलिखित हैं:

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

32 बिट प्रक्रिया में लोड होने पर 32 बिट प्रक्रिया में लोड होने पर 32 बिट प्रक्रिया में लोड होने पर एक भी एसीसीपीयू असेंबली 64 बिट कोड होगा।

सीपीयू को सीमित करके आप कहेंगे: असेंबली द्वारा कुछ उपयोग किया जा रहा है (कुछ अप्रबंधित) जिसके लिए 32 बिट्स या 64 बिट्स की आवश्यकता होती है।



"कोई भी सीपीयू" का अर्थ है कि जब प्रोग्राम शुरू होता है, तो .NET Framework ओएस सीधा के आधार पर पता लगाएगा, चाहे आपके प्रोग्राम को 32 बिट्स या 64 बिट्स में चलाया जाए।

X86 और किसी भी CPU के बीच एक अंतर है: x64 सिस्टम पर, X86 के लिए संकलित आपके निष्पादन योग्य 32-बिट निष्पादन योग्य के रूप में चलाया जाएगा।

जहां तक ​​आपके संदेह जाते हैं, बस विजुअल स्टूडियो 2008 कमांड लाइन पर जाएं और निम्न चलाएं।

dumpbin YourProgram.exe /headers

यह आपको आपके कार्यक्रम के बारे में बताएगा, साथ ही साथ बहुत कुछ।


यहां एक त्वरित अवलोकन है जो विभिन्न निर्माण लक्ष्यों को बताता है।

अपने अनुभव से, यदि आप एक ऐसी परियोजना बनाने की सोच रहे हैं जो x86 और x64 दोनों अनुप्रयोगों पर चलती है, और आपके पास कोई विशिष्ट x64 अनुकूलन नहीं है, तो मैं विशेष रूप से "x86" कहने के लिए बिल्ड को बदल दूंगा।

इसका कारण यह है कि कभी-कभी आप कुछ डीएलएल प्राप्त कर सकते हैं जो कि टकराते हैं या कुछ कोड जो x64 पर्यावरण में दुर्घटनाग्रस्त वाह को हवाएं देते हैं। विशेष रूप से x86 निर्दिष्ट करके, x64 ओएस ऐप को शुद्ध x86 ऐप के रूप में मानता है और सुनिश्चित करता है कि सब कुछ सुचारू रूप से चलता है।





64bit