जब कोड का एक ही टुकड़ा ऑप्टिमाइज़ेशन (g++ -O0
) के साथ संकलित किया गया है और फिर फिर ऑप्टिमाइज़ेशन पूरी तरह से सक्षम (g++ -O3
) के साथ, स्रोत कोड का तर्क कैसे बदला जा सकता है?कंपाइलर अनुकूलन कोड तर्क को कैसे प्रभावित कर सकता है?
उदाहरण के लिए, compilers
- unwind loops और
- constant folding कर सकते हैं।
ये दो अनुकूलन मूल स्रोत कोड की अखंडता को प्रभावित किए बिना कोड को तेजी से निष्पादित करते हैं। इन अनुकूलन के बिना चलने वाला कोई भी कोड उनके साथ सक्षम होगा।
लेकिन, कंपाइलर अनुकूलन कोड तर्क को भी प्रभावित कर सकता है। यहां दो उदाहरण दिए गए हैं जिन्हें मैं जानता हूं:
- Removing copy constructors and assignment operators अस्थायी से संभावित दुष्प्रभावों को हटा सकता है।
- फ्लोटिंग पॉइंट मान वाले अंकगणित में घुमावदार फ्लोटिंग पॉइंट त्रुटि को प्रभावित कर सकता है (उम्मीद है कि
-ffast-math
तर्क की आवश्यकता है)।
मैं बहुत ही आश्चर्यचकित और भाग्यशाली था, इनके बारे में जानने के लिए क्योंकि वे गलत स्थिति में भारी संभावनाएं बन सकते थे।
तो मैं जानना चाहता हूं, क्या कोई अन्य मामला है जहां सी ++ कंपाइलर अनुकूलन कोड तर्क को प्रभावित करेगा? मैं विशेष रूप से g ++ कंपाइलर के तहत सी ++ 11 (बिना किसी अपरिभाषित व्यवहार के) के बारे में जानकारी ढूंढ रहा हूं, लेकिन अन्य कंपाइलरों के लिए सुझावों का स्वागत है।
यह उल्लेख करना न भूलें कि अपरिभाषित व्यवहार का अर्थ कुछ भी होगा। – Mysticial
मेरा मानना है कि संकलक भी सामान की गणना नहीं कर सकता है जिसका उपयोग बाद में कभी नहीं किया जाता है। हालांकि यह आपके कोड के तर्क को नहीं बदलता है, लेकिन यदि आप प्रदर्शन को माप रहे हैं तो यह खराब हो सकता है। हालांकि मैं इसके बारे में निश्चित नहीं हूँ। – leo
@leo अच्छा बिंदु! हालांकि, मैं हमेशा आशा करता हूं कि अनुकूलन के साथ संकलन तेजी से प्रदर्शन करेगा, क्योंकि यह अनुकूलक का काम है। – Ryan