आज मेरे तर्कों में से एक के साथ एक तर्क था कि संक्रामक अनुकूलन सक्षम होने पर एक कंपाइलर प्रोग्राम के अर्थशास्त्र को बदल सकता है।अनुक्रम अंक, सशर्त और अनुकूलन
मेरा कॉलेग्यू बताता है कि जब अनुकूलन सक्षम होते हैं, तो एक कंपाइलर कुछ निर्देशों का क्रम बदल सकता है। ताकि:
function foo(int a, int b)
{
if (a > 5)
{
if (b < 6)
{
// Do something
}
}
}
के लिए बदला जा सकता है: इस मामले में
function foo(int a, int b)
{
if (b < 6)
{
if (a > 5)
{
// Do something
}
}
}
बेशक
, यह परिवर्तन नहीं करता कार्यक्रम सामान्य व्यवहार और वास्तव में महत्वपूर्ण नहीं है।
मेरी समझ से, मेरा मानना है कि दो if (condition)
संबंधित दो अलग अलग अनुक्रम अंक और कहा कि संकलक उनके आदेश को बदल नहीं सकते कि, भले ही वह बदल रहा है एक ही सामान्य व्यवहार को बनाए रखने होगा।
तो प्रिय प्रिय उपयोगकर्ताओं, इस बारे में सच क्या है?
मुझे अनुक्रम बिंदुओं के बारे में वास्तविक अर्थशास्त्र नहीं पता है, लेकिन केवल कल्पना करें कि उन दोनों मामलों में 'if (a> 5 && b <6)' के बराबर हैं ... और वे बदले में कम्यूटिव हैं।एकमात्र प्रदर्शन अंतर सांख्यिकीय रूप से शॉर्ट सर्किट की संभावना से आता है। लेकिन प्रश्न बन गया है, यहां तक कि उस परिवर्तन के साथ '&&' के प्रत्येक पक्ष पर दो अनुक्रम बिंदु हैं? मैं कल्पना करता हूं कि वहां होना चाहिए, क्योंकि यही एकमात्र तरीका शॉर्ट सर्किटिंग लागू किया जा सकता है। –
[यह अक्सर पूछे जाने वाले प्रश्न] (http://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points/4176333#4176333) सभी अनुक्रम बिंदु सूचीबद्ध करता है। क्या आपने इसे देखा है? – sbi
@ एसबीआई: नहीं, मैंने नहीं किया है। लेकिन अब मैं करूँगा;) धन्यवाद। – ereOn