निम्नलिखित उदाहरण पर विचार करें:
struct vector {
int size() const;
bool empty() const;
};
bool vector::empty() const
{
return size() == 0;
}
के लिए उत्पन्न विधानसभा कोड vector::empty
(अनुकूलन के साथ, क्लेंग द्वारा):
push rax
call vector::size() const
test eax, eax
sete al
pop rcx
ret
यह स्टैक स्पेस क्यों आवंटित करता है? इसका उपयोग बिल्कुल नहीं किया जाता है। push
और pop
हटाया जा सकता है। MSVC के अनुकूलित बिल्ड और gcc भी इस फ़ंक्शन के लिए स्टैक स्पेस का उपयोग करते हैं ( गॉडबोल्ट पर देखें ), इसलिए एक कारण होना चाहिए।
@ याकूब: नहीं। मुझे क्यों करना चाहिए?
—
डॉ। गुट
vector::size()
उदाहरण के लिए यह अनुकरण करने के लिए परिभाषित नहीं है कि यह इनलेट नहीं है।
तो, एक संकलक कुछ ऐसा कैसे अनुकूलित कर सकता है जो यह नहीं जानता है?
—
Bob__
@ याकूब: मुझे लगता है, यह जानना कि कार्यान्वयन के
—
डॉ। गुट
vector::size()
लिए प्रासंगिक नहीं है या इसके लिए स्टैक फ्रेम आवंटित नहीं करना है vector::empty()
। इसमें empty()
सिर्फ यह कहा जाता है, चाहे वह कुछ भी हो।
ठीक है, आप एक फ़ंक्शन को कॉल कर रहे हैं जो कुछ देता है, आपको उसके लिए स्थान की आवश्यकता है (यदि आप कोई बेहतर नहीं जानते हैं)।
—
Bob__
this
पैरामीटर के लिए खाता है ?