अक्सर likely
और unlikely
मैक्रोज़ के रूप में जाना जाता है यह संकलक को यह जानने में मदद करता है कि क्या if
आमतौर पर प्रवेश किया जा रहा है या छोड़ दिया गया है। इसका उपयोग करने से कुछ (बल्कि मामूली) प्रदर्शन में सुधार होता है।
मैंने हाल ही में उनका उपयोग करना शुरू कर दिया है, और मुझे यकीन नहीं है कि इस तरह के संकेतों का कितनी बार उपयोग किया जाना चाहिए। वर्तमान में मैं इसे एरर चेकिंग if
एस के साथ उपयोग करता हूं , जो आमतौर पर चिह्नित होते हैं unlikely
। उदाहरण के लिए:
mem = malloc(size);
if (unlikely(mem == NULL))
goto exit_no_mem;
यह ठीक लगता है, लेकिन त्रुटि-जाँच if
बहुत बार होती है और परिणामस्वरूप उक्त मैक्रोज़ का उपयोग होता है।
मेरा प्रश्न यह है कि क्या प्रत्येक त्रुटि जाँच पर मैक्रो likely
और unlikely
मैक्रो होना बहुत अधिक है if
?
जब हम इस पर होते हैं, तो वे किन अन्य स्थानों पर अक्सर उपयोग किए जाते हैं?
मेरे वर्तमान उपयोग में यह एक पुस्तकालय में है जो वास्तविक समय के सबसिस्टम से एक अमूर्त बनाता है, इसलिए कार्यक्रम RTAI, QNX और अन्य के बीच पोर्टेबल हो जाएंगे। उस ने कहा, अधिकांश कार्य छोटे होते हैं और सीधे एक या दो अन्य कार्यों को कहते हैं। कई static inline
कार्य भी हैं।
इसलिए, सबसे पहले, यह एक ऐसा एप्लिकेशन नहीं है जिसे मैं प्रोफाइल कर सकता हूं। यह "बोतल-गर्दन की पहचान" करने का कोई मतलब नहीं है क्योंकि यह एक पुस्तकालय है, एक स्टैंडअलोन एप्लिकेशन नहीं है।
दूसरा, यह इस तरह का है "मुझे पता है कि यह संभावना नहीं है, मैं इसे कंपाइलर को भी बता सकता हूं"। मैं सक्रिय रूप से अनुकूलित करने का प्रयास नहीं करता हूं if
।
likely
और unlikely
मौजूद हैं और वे क्या करते हैं। मुझे ऐसा कुछ नहीं मिला जो वास्तव में सुझाव दे कि कब और कहाँ उनका उपयोग करना सबसे अच्छा है।