स्थिर बलन

लगातार फोल्डिंग और निरंतर प्रसार संबंधित अनुकूलन [[संकलक]] हैं जो कई आधुनिक कंपाइलर्स द्वारा उपयोग किए जाते हैं। विरल सशर्त निरंतर प्रसार के रूप में जाना जाने वाला निरंतर प्रसार का एक उन्नत रूप स्थिरांक को अधिक सटीक रूप से प्रसारित कर सकता है और साथ ही मृत कोड को हटा सकता है।

लगातार तह
निरंतर फोल्डिंग रनटाइम पर गणना करने के बजाय संकलन समय पर कॉन्स्टेंट (प्रोग्रामिंग) अभिव्यक्तियों को पहचानने और मूल्यांकन करने की प्रक्रिया है। निरंतर अभिव्यक्तियों में शर्तें आम तौर पर सरल शाब्दिक होती हैं, जैसे पूर्णांक शाब्दिक, लेकिन वे चर भी हो सकते हैं जिनके मान संकलन समय पर ज्ञात होते हैं। कथन पर विचार करें:

<वाक्यविन्यास लैंग = सी> मैं = 320 * 200 * 32; 

अधिकांश कंपाइलर वास्तव में इस कथन के लिए दो गुणा निर्देश और एक स्टोर उत्पन्न नहीं करेंगे। इसके बजाय, वे इन जैसे निर्माणों की पहचान करते हैं और गणना किए गए मूल्यों को संकलन समय पर प्रतिस्थापित करते हैं (इस मामले में, ).

लगातार मोड़ने से अंकगणितीय सर्वसमिकाओं का उपयोग किया जा सकता है। अगर  संख्यात्मक है, का मान   शून्य है भले ही संकलक का मूल्य नहीं जानता हो   (ध्यान दें कि यह IEEE_754 के बाद से मान्य नहीं है   अनंत या NaN हो सकता है। फिर भी, कुछ वातावरण जो प्रदर्शन के पक्ष में हैं जैसे जीएलएसएल शेडर्स इसे स्थिरांक के लिए अनुमति देते हैं, जो कभी-कभी बग का कारण बन सकते हैं)।

लगातार मोड़ना केवल संख्याओं से अधिक पर लागू हो सकता है। शाब्दिक स्ट्रिंग और निरंतर स्ट्रिंग्स के संयोजन को लगातार मोड़ा जा सकता है। कोड जैसे  से बदला जा सकता है.

लगातार तह और क्रॉस संकलन
एक क्रॉस कंपाइलर को लागू करने में, यह सुनिश्चित करने के लिए सावधानी बरतनी चाहिए कि मेजबान आर्किटेक्चर पर अंकगणितीय परिचालनों का व्यवहार लक्ष्य आर्किटेक्चर पर मेल खाता है, अन्यथा निरंतर फोल्डिंग को सक्षम करने से कार्यक्रम के व्यवहार में बदलाव आएगा। तैरनेवाला स्थल ऑपरेशंस के मामले में इसका विशेष महत्व है, जिसका सटीक कार्यान्वयन व्यापक रूप से भिन्न हो सकता है।

लगातार प्रचार
निरंतर प्रसार संकलन समय पर भावों में ज्ञात स्थिरांक के मूल्यों को प्रतिस्थापित करने की प्रक्रिया है। इस तरह के स्थिरांक में वे शामिल हैं जो ऊपर परिभाषित किए गए हैं, साथ ही निरंतर मूल्यों पर लागू आंतरिक कार्य भी शामिल हैं। निम्नलिखित स्यूडोकोड पर विचार करें:

<वाक्यविन्यास लैंग = सी> इंट एक्स = 14; इंट वाई = 7 - एक्स / 2; वापसी वाई * (28 / एक्स + 2); 

एक्स उपज का प्रचार:

<वाक्यविन्यास लैंग = सी> इंट एक्स = 14; इंट वाई = 7 - 14/2; वापसी वाई * (28/14 + 2); 

निम्नलिखित का प्रचार करना जारी रखना (जो संभवतः x और y दोनों के डेड-कोड उन्मूलन द्वारा अनुकूलित किया जाएगा।)

<वाक्यविन्यास लैंग = सी> इंट एक्स = 14; इंट वाई = 0; वापसी 0; 

परिभाषा विश्लेषण परिणामों तक पहुँचने का उपयोग करके कंपाइलरों में निरंतर प्रसार लागू किया जाता है। यदि सभी वेरिएबल की परिभाषा तक पहुँचना एक ही असाइनमेंट है जो वेरिएबल को एक समान स्थिरांक प्रदान करता है, तो वेरिएबल का एक स्थिर मान होता है और इसे कॉन्स्टेंट से बदला जा सकता है।

निरंतर प्रसार भी सशर्त शाखाओं को एक या अधिक बिना शर्त बयानों को सरल बनाने का कारण बन सकता है, जब केवल संभावित परिणाम निर्धारित करने के लिए संकलन समय पर सशर्त अभिव्यक्ति का सही या गलत मूल्यांकन किया जा सकता है।

कार्रवाई में अनुकूलन
निरंतर तह और प्रसार आम तौर पर कई सरलीकरण और कटौती को प्राप्त करने के लिए एक साथ उपयोग किया जाता है, जब तक कि कोई और परिवर्तन न हो जाए। इस अडॉप्टिमाइज्ड स्यूडोकोड पर विचार करें जो यादृच्छिक संख्या पीढ़ी लौटाता है:

<वाक्यविन्यास लैंग = सी> इंट ए = 30; इंट बी = 9 - (ए / 5); इंट सी;

सी = बी * 4; अगर (सी> 10) { सी = सी - 10; } वापसी सी * (60 / ए); 

निरंतर प्रसार को एक बार लागू करना, उसके बाद निरंतर तह करना, पैदावार:

<वाक्यविन्यास लैंग = सी> इंट ए = 30; इंट बी = 3; इंट सी;

सी = बी * 4; अगर (सी> 10) { सी = सी - 10; } वापसी सी * 2; 

दोनों चरणों को दो बार दोहराने के परिणामस्वरूप:

<वाक्यविन्यास लैंग = सी> इंट ए = 30; इंट बी = 3; इंट सी;

सी = 12; यदि सही) {    सी = 2;  }  वापसी सी * 2; 

जैसा  और   स्थिरांक के लिए सरलीकृत किया गया है और उनके मूल्यों को हर जगह प्रतिस्थापित किया गया है, संकलक अब उन्हें हटाने के लिए डेड-कोड उन्मूलन लागू करता है, कोड को और कम करता है:

<वाक्यविन्यास लैंग = सी> इंट सी; सी = 12;

यदि सही) {    सी = 2;  }  वापसी सी * 2; 

उपरोक्त कोड में, के बजाय  यह संकलक ढांचे के आधार पर 1 या कोई अन्य बूलियन निर्माण हो सकता है। पारंपरिक निरंतर प्रचार के साथ हमें केवल इतना ही अनुकूलन मिलेगा। यह कार्यक्रम की संरचना को नहीं बदल सकता है।

इसी तरह का एक और अनुकूलन है, जिसे विरल सशर्त निरंतर प्रसार कहा जाता है, जिसके आधार पर उपयुक्त शाखा का चयन किया जाता है. कंपाइलर अब पता लगा सकता है कि  बयान हमेशा बूलियन डेटाटाइप का मूल्यांकन करेगा,   कोड को और भी सिकोड़ते हुए खुद को समाप्त किया जा सकता है:

<वाक्यविन्यास लैंग = सी> वापसी 4; 

यदि यह स्यूडोकोड किसी फ़ंक्शन के निकाय का गठन करता है, तो संकलक उस ज्ञान का लाभ उठा सकता है जो निरंतर पूर्णांक का मूल्यांकन करता है  फ़ंक्शन में अनावश्यक कॉल को समाप्त करने के लिए, और अधिक प्रदर्शन लाभ उत्पन्न करना।

यह भी देखें

 * नियंत्रण-प्रवाह ग्राफ
 * उपयोग-परिभाषित श्रृंखला और एसएसए फॉर्म
 * कॉपी प्रचार
 * सामान्य उप-अभिव्यक्ति उन्मूलन
 * आंशिक मूल्यांकन