यह सब C11 5.1.2.3
कार्यक्रम निष्पादन
/में वर्णन किया गया फ़ंक्शन जो कि इनमें से कोई भी ऑपरेशन सभी दुष्प्रभाव है, जो निष्पादन वातावरण की स्थिति में परिवर्तन हैं। सामान्य रूप से अभिव्यक्ति के मूल्यांकन में मूल्य गणना और साइड इफेक्ट्स की शुरुआत दोनों शामिल हैं।
से पहले अनुक्रम एक असममित, सकर्मक, इस जोड़ी के लिहाज से मूल्यांकन किसी एकल थ्रेड, जो उन के मूल्यांकन के बीच आंशिक आदेश लाती द्वारा निष्पादित के बीच संबंध है। किसी भी दो मूल्यांकन एक को देखते हुए और बी, अगर एक बी से पहले अनुक्रम है, तो एक के निष्पादन बी के निष्पादन के पूर्व में होना चाहिए ...
भाव के मूल्यांकन के बीच एक अनुक्रम बिंदु की उपस्थिति ए और बी का तात्पर्य है कि हर मूल्य गणना और एक के साथ जुड़े पक्ष प्रभाव
/बी के साथ जुड़े हर मूल्य गणना और पक्ष प्रभाव से पहले अनुक्रम है -/
एक वास्तविक क्रियान्वयन एक अभिव्यक्ति है, तो के हिस्से का मूल्यांकन नहीं जरूरत यह कम कर सकता है कि इसका मूल्य उपयोग नहीं किया जाता है और नहीं आवश्यक दुष्प्रभाव उत्पन्न होते हैं (किसी फ़ंक्शन को कॉल करके या अस्थिर वस्तु तक पहुंचने के कारण)।
/-/
एक अनुरूप क्रियान्वयन पर कम से कम आवश्यकताएँ हैं:
- अस्थिर वस्तुओं के लिए ऐक्सेस सार मशीन के नियमों के अनुसार सख्ती से मूल्यांकन किया जाता है।
यह व्याख्या करने के लिए वास्तव में आसान नहीं है, लेकिन क्या यह मोटे तौर पर सादे अंग्रेजी में इसका मतलब है: के बाद से अस्थिर वस्तुओं की पहुँच एक पक्ष प्रभाव है, संकलक ऐसे पहुंच दूर का अनुकूलन करने के लिए अनुमति नहीं है, न तो यह है उन्हें एक अलग क्रम में अनुक्रमित करने की इजाजत दी गई, जो अन्यथा शायद सीपीयू पर निर्देश कैश/शाखा भविष्यवाणी के साथ बेहतर प्रदर्शन करने के लिए किया जा सकता है, या सिर्फ बेहतर प्रदर्शन क्योंकि कुछ निश्चित मूल्यों को आसानी से कुछ CPU रजिस्टर में संग्रहीत किया गया था।
(C11 मानक भी स्पष्ट रूप से कहा गया है कि अस्थिर वस्तुओं धागा सुरक्षित होने की गारंटी नहीं कर रहे हैं, एक संदर्भ स्विच के बाद एक अस्थिर वस्तु के मूल्य अनिर्दिष्ट व्यवहार है।)
संपादित एक उदाहरण
0 कोड
volatile int x;
volatile int y;
volatile int z;
x=i;
y=something;
z=i;
तो संकलक पुनः आदेश देने के निष्पादन योग्य निर्देश अनुमति नहीं है को देखते हुए
x=i;
z=i;
y=something
क्योंकि y के लिए उपयोग z के लिए उपयोग से पहले अनुक्रम किया जाना चाहिए। सेमी कॉलन में एक अनुक्रम बिंदु है। लेकिन यदि चर अस्थिर नहीं थे, तो कंपाइलर को फिर से ऑर्डर करने के लिए यह ठीक होगा, अगर यह निर्धारित कर सके कि यह प्रोग्राम के नतीजे को प्रभावित नहीं करेगा।
volatile int v = 5;
int x;
int y = (x=7), (x+v);
याद रखें कि अल्पविराम एक दृश्य बिंदु बनाता है:
अनुक्रम बिंदुओं पर कुछ पृष्ठभूमि यहां दी गई है - http://www.angelikalanger.com/Articles/VSJ/SequencePoints/SequencePoints.html –
इसका मतलब है कि अनुकूलन और निर्देश जनरेशन के दौरान, कोड/निर्देश अन्यथा पुन: व्यवस्थित किए जा सकते हैं , interleaved, आदि अधिक कुशल निष्पादन के लिए, अस्थिर चर का उपयोग करने वाले निर्देश काफी प्रभावित हैं कि वे कैसे प्रभावित हो सकते हैं। – twalberg