2016-09-11 16 views
5

मैं अभी भी सी ++ सीख रहा हूं। मैं यह समझने की कोशिश कर रहा हूं कि एक कदम-दर-चरण फैशन में मूल्यांकन कैसे किया जाता है। तो इस सरल उदाहरण का उपयोग करते हुए, एक अभिव्यक्ति कथन:सी ++ अभिव्यक्ति मूल्यांकन: "हुड के तहत" क्या होता है?

int x = 8 * 5 - 5;

यह है कि मैं मानता हूं होता है। कृपया मुझे बताएं कि मैं कितना दूर हूं:

  1. ऑपरेटरों x, 8, 5, और 5 "मूल्यांकन" हैं। संभवतः, प्रत्येक मान को पकड़ने के लिए एक अस्थायी वस्तु बनाई गई है (मुझे इसके बारे में भी निश्चित नहीं है)।

  2. 8 * 5 40 का मूल्यांकन करता है, जो अस्थायी रूप से संग्रहीत होता है।

  3. 40 (अस्थायी) - 5 35 (अन्य अस्थायी) का मूल्यांकन करता है।

  4. 35 को x में कॉपी किया गया है।

  5. सभी अस्थायी वस्तुओं को उनके द्वारा बनाए गए रिवर्स ऑर्डर में नष्ट कर दिया जाता है (मान त्याग दिया जाता है)।

क्या मैं कम से कम सही होने के करीब हूं?

+4

बहुत उच्च स्तर के परिप्रेक्ष्य से, हां। हकीकत में, ऑपरेशन सीपीयू रजिस्टरों में किया जाता है। और वास्तविक वास्तविकता में, संपूर्ण अभिव्यक्ति का संकलन समय पर मूल्यांकन किया जाता है, इसलिए आप संकलन समाप्त करते हैं "x = 35"। –

+0

मुझे उस प्रश्न को डुप्लिकेट के रूप में चिह्नित करने के लिए प्रश्न ढूंढने दें ... –

+0

@SamVarshavchik धन्यवाद, महोदय। हम्म। क्या होगा यदि सभी ऑपरेटरों को अक्षर के बजाय वस्तुओं का नाम दिया गया था? क्या यह समय पर संकलन के बजाए फ्लाई पर अस्थायी बनायेगा, तो बोलने के लिए? –

उत्तर

0

"धन्यवाद, महोदय, एचएम। क्या होगा यदि सभी ऑपरेटरों को अक्षर के बजाय वस्तुओं का नाम दिया गया था? क्या यह फिक्स्ड समय के बजाय उड़ने के लिए अस्थायी बना देगा?"

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

a = 5; 
b = 2; 
c = a * b; 

संकलक कोशिश करते हैं और सबसे इष्टतम कोड उत्पन्न होगा, और के बाद से इस मामले में 2 स्थिरांक कि संकलन समय पर जाना जाता है देखते हैं, और आप 2 से गुणा करते हैं, यह हो जाएगा शॉर्टकट लेने में सक्षम, कभी-कभी गुणाओं को बिट ऑपरेशंस द्वारा प्रतिस्थापित किया जाता है जो सस्ता होते हैं (2 से गुणा 2 बाएं स्थानांतरित करने के समान होता है)

नामित चरों को कहीं भी, स्टैक या ढेर पर, और सीपीयू पर रहना पड़ता है नामित वस्तुओं के पते का उपयोग उन्हें पास करने और कार्यों को करने के लिए करेंगे। (यदि वे काफी छोटे हैं तो यह रजिस्टरों में फिट होगा और उन पर काम करेगा, अन्यथा यह स्मृति का उपयोग शुरू कर देगा, पहले कैश, और फिर रैम पर खून बह जाएगा)

आप 'अमूर्त वाक्यविन्यास पेड़' के लिए Google को प्राप्त करने के लिए Google पठनीय सी ++ कोड को मशीन कोड में कैसे परिवर्तित किया जाता है इसका विचार।

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

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