9

में पूरे प्रोग्राम अनुकूलन में असफल रहा है मेरे पास वीएस -2008 के तहत संकलित एक उचित सी ++ प्रोग्राम (~ 11 एमबी एक्सई) है और यह देखने में दिलचस्पी थी कि क्या संपूर्ण प्रोग्राम अनुकूलन इसके प्रदर्शन को महत्वपूर्ण रूप से प्रभावित करेगा या नहीं। हालांकि, पूरे कार्यक्रम अनुकूलन और लिंक टाइम कोड पीढ़ी को चालू करने से लिंक निम्नानुसार विफल हो जाता है;वीसी -2008

1>c:\cpp\Win32\Atlas\tin\TINDoc.Cpp : fatal error C1083: Cannot open compiler intermediate file: '.\releaseopt\TINDoc.obj': Not enough space 
1>LINK : fatal error LNK1257: code generation failed 

कार्य प्रबंधक को देखते हुए, मैं अधिक से अधिक स्मृति का उपयोग जब तक यह बाहर बम बाहर चलाता है और लिंकर देख सकते हैं। कंपाइलर 2 जीबी या रैम और 2 जीबी पेज फ़ाइल के साथ एक्सपी 32 बिट पर चल रहा है। क्या WPO छोटे अनुप्रयोगों और/या बड़े वातावरण तक सीमित है, या क्या लिंकर को स्मृति उपयोग में थोड़ी अधिक मितव्ययी होने का कोई तरीका है।

एनबी। पहले से ही प्रीकंपिल्ड हेडर से बदल गया है, जो संकलन को जोड़ने से पहले असफल हो रहा था, और डीबग जानकारी के आउटपुट को बंद कर दिया और कुछ भी जो अतिरिक्त संसाधन ले सकता है। सी 1083 के लिए सहायता अंतरिक्ष की कमी के बजाय अनुपलब्ध हेडर फ़ाइलों या अपर्याप्त फ़ाइल हैंडल का सुझाव देती है।

संपादित करें: यह वीएस -2010 के तहत काम कर रहा है, यद्यपि प्रीकंपिल्ड हेडर के बिना, लेकिन प्रदर्शन लाभ महत्वपूर्ण नहीं हैं। जब तक मैं वीएस -2010 के एक अधिक मजबूत संस्करण के साथ एक बीफियर 64 बिट प्लेटफ़ॉर्म पर नहीं जाता, तब तक मैं अकेले इस विकल्प को छोड़ दूंगा।

+6

दिलचस्प सवाल। मुफ्त डिस्क स्थान के बारे में क्या; क्या आप शायद कम चल रहे हैं? मुझे लगता है [माइक्रोसॉफ्ट कनेक्ट पर यह बग] (http://connect.microsoft.com/VisualStudio/feedback/details/581207/visual-studio-2005-sp1-reproducible-linker-error-lkn1257-caused-by-c1083) ऐसा लगता है कि आपके लक्षणों से मेल खाता है। टिप्पणियों का कहना है कि इसे वीएस 2010 में तय किया गया है। यदि यह एक विकल्प है, तो आप इसे आजमा सकते हैं। –

+1

एक ही बग ठीक लगता है। जब मुझे मौका मिलता है, तो मैं वीएस -2010 पर कोशिश करूंगा, और अपने परिणाम पोस्ट करूंगा। प्रतिक्रिया के लिए धन्यवाद। बीटीडब्ल्यू, उपलब्ध डिस्क स्थान का भार। –

+2

वीसी 2008 एक नाजुक जानवर है। ऑप्टिमाइज़र कुछ मामलों के लिए काम नहीं करता है, और ऐसा लगता है कि आपके पास ऐसा कोई मामला है। –

उत्तर

5

वीसी 2008 एक नाजुक जानवर है। ऑप्टिमाइज़र कुछ मामलों के लिए काम नहीं करता है, और ऐसा लगता है कि आपके पास संभवतः ऐसा एक मामला हो सकता है।

की "काम नहीं कर" उदाहरण

  • डी-अनुकूलित कोड (धीमा!)
  • संकलक या (अधिक बार) लिंकर दुर्घटनाओं
  • अस्पष्ट संकलन/लिंक त्रुटि संदेश
  • गलत कोड शामिल निष्पादन (यह दुर्लभ है, लेकिन अज्ञात नहीं है)।

असल में, यदि आप आधुनिक ऑप्टिमाइज़र द्वारा उपयोग की जाने वाली कुछ चालों को देखते हैं तो यह आश्चर्यजनक है कि यह अक्सर काम करता है। जटिलता काफी आश्चर्यजनक है।

विशेष रूप से शेन की समस्या को संबोधित करते हुए कुछ चीजें हैं जो अपने त्रुटि के कारण हो सकता:

  1. फ़ाइल समाप्त होने वाले हैं डॉस और जल्दी विंडोज संस्करणों में एक बड़ी समस्या हुआ करता था हैंडल। आप इसे आधुनिक विंडोज संस्करणों में शायद ही कभी देखते हैं। मुझे यह भी यकीन नहीं है कि फ़ाइल हैंडल पर अभी भी एक सीमा है।

  2. एक कंपाइलर बग एक अनंत लूप कर सकता है, जिसका अर्थ है कि संसाधनों की कोई मात्रा पर्याप्त नहीं होगी।

  3. एक पुनरावर्ती फ़ाइल में कुछ समान कारण भी हो सकता है। क्या आपकी सभी शामिल फाइलों में "#pragma once" या "#if !defined(FOO_INCLUDED)" है?

  4. क्या यह संभव है कि आपने परियोजना में दो बार TINDoc.obj फ़ाइल शामिल की हो?2008 संकलक आक्रामक रूप से बहु-थ्रेडेड है और फ़ाइल तक पहुंचने की कोशिश कर रहे दो धागे के बीच विवाद हो सकता है। असल में यह एक कंपाइलर बग के माध्यम से हो सकता है, भले ही आपने फ़ाइल को दो बार शामिल नहीं किया हो।

  5. तो कार्यक्रम वास्तव में सिर्फ बहुत बड़ा है, एक या अधिक DLLs में टूट रहा है और यह टुकड़ों में निर्माण, या एकाधिक फ़ाइलों में विवादास्पद स्रोत फ़ाइल कई चरणों में कम्पाइलर के बंटवारे पर विचार करें।

ऐसा न मानें, क्योंकि यह कहता है कि "पर्याप्त जगह नहीं है" जिसका कारण होना चाहिए। कुछ प्रोग्राम (कुछ कंपाइलर्स समेत) जांच के बजाए त्रुटि के कारण का अनुमान लगाएंगे।

आप कार्य प्रबंधक या परफ़ॉर्मेंस, या (मेरी प्राथमिकता) का उपयोग कर स्मृति, हैंडल, आदि के उपयोग की निगरानी कर सकते Process Explorer

मैं पहले से ही (ऊपर) एक टिप्पणी के रूप में इस के पहले भाग तैनात लेकिन मैं एक बेन (http://stackoverflow.com/users/587803/ben) द्वारा सुझाए गए अनुसार इसे उत्तर दें - और इसे कुछ हद तक विस्तारित किया।

+0

अच्छा सारांश माइकल, मैं सभी शीर्षकों पर '#pragma एक बार' का उपयोग करता हूं, और संसाधन ग्राफ़ देख रहा था ताकि अंतरिक्ष त्रुटि उचित लगे। यह एक बड़ा कोड बेस है जो पहले से ही तीसरे पक्ष के डीएलएल की उचित संख्या के साथ एक्सई के ~ 11 एमबी उत्पन्न करता है। मुझे वीएस -2010 का उपयोग करके पूरे कार्यक्रम अनुकूलन का काम मिल रहा है, और यह मेरे मामले में ज्यादा सुधार नहीं करता है, इसलिए मैं अभी इस विकल्प से बचने जा रहा हूं। –

3

लिंकर को 3 जीबी पता स्थान देने के लिए आप /3G स्विच के साथ XP बूट करने का प्रयास कर सकते हैं। Vista/7 में, समान प्रभाव प्राप्त करने के लिए कमांड लाइन में BCDEDIT /Set IncreaseUserVa 3072 का उपयोग करें।

इसने मेरे लिए .ilk-files बनाने में समस्याएं हल की हैं।

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