2013-03-21 8 views
9

रिहाई जीसीसी के लिए नोट -Og पर एक छोटे से अस्पष्ट थे:जीसीसी -O0 बनाम -Og संकलन समय

यह तेजी से संकलन और एक बेहतर डीबगिंग अनुभव के लिए की जरूरत को संबोधित करते हुए क्रम का एक उचित स्तर प्रदान प्रदर्शन। विकास के लिए कुल मिलाकर अनुभव डिफ़ॉल्ट अनुकूलन स्तर -O0 से बेहतर होना चाहिए।

क्या "विकास के लिए कुल मिलाकर अनुभव" में संकलन समय शामिल है? अगर मुझे डीबग प्रतीकों की आवश्यकता नहीं है और संकलन समय के लिए अनुकूलित कर रहा हूं, तो क्या मुझे -O0 या -Og का उपयोग करना चाहिए?

+3

यदि आपको डिबगिंग प्रतीकों की आवश्यकता नहीं है तो आपको -O0 – Akobold

+4

का उपयोग करना चाहिए क्यों न केवल * आपके प्रोजेक्टर * के साथ * आपके कंपाइलर * के विभिन्न विकल्पों के साथ पूर्ण निर्माण का समय, और जो भी सबसे तेज़ है? – NPE

+0

यदि आप केवल अच्छे प्रदर्शन में रुचि रखते हैं, तो सामान्य स्तर O2 है। ओ 0 लगभग कोई अनुकूलन नहीं है, और यह ज्यादातर डिबगिंग के लिए किया गया है (उदाहरण के लिए यह अप्रयुक्त चर को अनुकूलित नहीं करेगा, यह मैला कोडिंग में सुधार नहीं करेगा जो आसानी से तय किया गया है)। – teppic

उत्तर

1

-Og के साथ कंपाइलर को अतिरिक्त डेटा (डिबगिंग के लिए) बनाना और लिखना है, इसलिए इसमें अधिक समय लगेगा। बस असेंबलर को संकलित करें (gcc -S -Og, आदि के साथ) और तुलना करें। लेकिन -O0 और -Og रनटाइम के बीच जो भी अंतर है, gcc और इसकी पूरी मशीनरी शुरू करने के समय संभवतः बौने हो गया है।

यदि आप संकलन समय चाहते हैं, तो शायद आपको सी के लिए tcc पर विचार करना चाहिए। शायद LLVM सी ++ के लिए तेज़ है।

+2

क्या आपके पास अपने पहले दावे का बैकअप लेने के सबूत हैं, "साथ ही संकलक को अतिरिक्त डेटा (डिबगिंग के लिए) बनाना और लिखना है"? अगर मैं गलत नहीं हूं तो यह केवल '-g' झंडे पर लागू होगा। जीसीसी 4.9.2 स्रोत कोड ('gcc/opts.c') में एक नज़र से पता चला है कि' -Og' '-O1' ('/* -Og ऑप्टिमाइज़ेशन स्तर 1. */'का चयन करता है) जैसा ही है, लेकिन कुछ झंडे अक्षम किए गए हैं जिन्हें '-O1' या उच्चतर' (OPT_LEVELS_1_PLUS_NOT_DEBUG', 'OPT_LEVELS_1_PLUS_SPEED_ONLY', और 'OPT_LEVELS_2_PLUS_SPEED_ONLY') के साथ सक्षम किया जाएगा। – Lekensteyn

+1

मैंने यहां एक और व्यापक उत्तर पोस्ट किया: http://stackoverflow.com/a/27076307/427545 – Lekensteyn

1

क्या "विकास के लिए कुल मिलाकर अनुभव" में संकलन समय शामिल है?

मुझे लगता है कि यह करता है, लेकिन इस विशिष्ट मामले में नहीं।

यदि मुझे डीबग प्रतीकों की आवश्यकता नहीं है और संकलन समय के लिए अनुकूलन कर रहा हूं, तो क्या मुझे -O0 या -Og का उपयोग करना चाहिए?

-O0

0

यदि मुझे डीबग प्रतीकों की आवश्यकता नहीं है और संकलन समय के लिए अनुकूलन कर रहा हूं, तो क्या मुझे -O0 या -Og का उपयोग करना चाहिए?

उपस्थिति या डिबग प्रतीकों के अभाव कोई फर्क नहीं पड़ता है, तो समय दोनों विकल्प हैं और देखते हैं जो एक तेज है।

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