2013-11-27 8 views
8

में सभी अनुकूलन को कैसे बंद करें जीसीसी में सभी अनुकूलन कैसे बंद करें? -O0 का उपयोग करना काम नहीं करता है क्योंकि यह अभी भी उन बयानों को अनुकूलित करता है जिनके प्रभाव नहीं हैं, या किसी भी कोड जो बिना किसी ब्रेक स्टेटमेंट के अनंत लूप के बाद है।जीसीसी

+0

वहाँ कोई भी है, बदलने के सब मेरे पास है -जी-जी सख्त बौने -Wall – user2124324

+0

मुझे नहीं लगता कि आप सभी अनुकूलन बंद कर सकते हैं। –

+0

यहां तक ​​कि किसी भी झंडे के बिना जीसीसी कुछ बुनियादी अनुकूलन करता है। किसी भी प्रभाव (अनुकूलन या नहीं) के साथ बयान हटाने के लिए यह समझ में आता है। बस उत्सुक: आप मृत कोड क्यों रखना चाहते हैं? –

उत्तर

7

जीसीसी को पहुंचने योग्य कोड और उन विधियों को अनदेखा करने का कोई तरीका नहीं है जिनके प्रभाव नहीं हैं।

आप जो भी कर सकते हैं वह कोड है जो पहुंचने योग्य नहीं है अस्थिर चर का उपयोग करके पहुंच योग्य दिखाई देता है।

volatile bool always_true = true; 

if(always_true ) 
{ 
    //infinite loop 
    //return something 
} 

//Useless code 
ऊपर के उदाहरण में

, जीसीसी बेकार कोड बाहर optomize नहीं होगा क्योंकि यह वास्तव में बेकार

int a = 5; 
int b = 5; 
volatile int c = 9; 

c += 37; 
return a + b; 

इस उदाहरण में है पता नहीं कर सकते हैं, पूर्णांक ग बाहर अनुकूलित नहीं किया जाएगा क्योंकि जीसीसी करता है यह नहीं पता कि यह मृत वजन कोड है।

2

आपको कंपाइलर द्वारा अनुकूलित करने के लिए अपना कोड लगभग असंभव बनाना होगा। उदाहरण के लिए: बस केवल चर मान परिवर्तित नहीं बल्कि मूल्य प्रिंट या संग्रहीत:

  • उपयोग चर है कि आप नहीं चाहते हैं अनुकूलित करने पर volatile कीवर्ड
  • यकीन है कि कोड प्रभाव, उदाहरण के लिए कर अन्य चर करने के लिए या चर करने के लिए गणित करते हैं और अन्य चर
  • सन्दर्भ में इसे स्टोर/चर अन्य समारोह में संकलक यह न्याय नहीं कर सकते संकलन समय में नहीं किया जाता है सुनिश्चित करने के लिए