खोज…


परिचय

संकलन करते समय, कंपाइलर अक्सर प्रदर्शन को बढ़ाने के लिए कार्यक्रम को संशोधित करेगा। यह अनुमति दी जाती है, जैसा कि नियम है , जो किसी भी और सभी परिवर्तनों को अनुमति देता है जो अवलोकन योग्य व्यवहार को नहीं बदलते हैं।

इनलाइन विस्तार / इनलाइनिंग

इनलाइन विस्तार (जिसे इनलाइनिंग के रूप में भी जाना जाता है) कंपाइलर ऑप्टिमाइज़ेशन है जो किसी फ़ंक्शन को उस फ़ंक्शन के शरीर के साथ कॉल की जगह देता है। यह फ़ंक्शन कॉल ओवरहेड को बचाता है, लेकिन अंतरिक्ष की कीमत पर, क्योंकि फ़ंक्शन को कई बार दोहराया जा सकता है।

// source:

int process(int value)
{
    return 2 * value;
}

int foo(int a)
{
    return process(a);
}

// program, after inlining:

int foo(int a)
{
    return 2 * a; // the body of process() is copied into foo()
}

इनलाइनिंग आमतौर पर छोटे कार्यों के लिए किया जाता है, जहां फ़ंक्शन बॉडी के आकार की तुलना में फ़ंक्शन कॉल ओवरहेड महत्वपूर्ण है।

खाली आधार अनुकूलन

किसी भी वस्तु या सदस्य उप-विषय का आकार कम से कम 1 होना आवश्यक है, भले ही वह प्रकार एक खाली class प्रकार हो (अर्थात, एक class या struct जिसमें कोई गैर-स्थैतिक डेटा सदस्य नहीं है), इस बात की गारंटी देने में सक्षम होने के लिए एक ही प्रकार की अलग-अलग वस्तुओं के पते हमेशा अलग होते हैं।

हालांकि, बेस class सबोबेक्ट्स इतने विवश नहीं हैं, और ऑब्जेक्ट लेआउट से पूरी तरह से अनुकूलित किए जा सकते हैं:

#include <cassert>

struct Base {}; // empty class

struct Derived1 : Base {
    int i;
};

int main() {
    // the size of any object of empty class type is at least 1
    assert(sizeof(Base) == 1);

    // empty base optimization applies
    assert(sizeof(Derived1) == sizeof(int));
}

खाली बेस अनुकूलन का उपयोग आमतौर पर आवंटनकर्ता-जागरूक मानक लाइब्रेरी क्लासेस ( std::vector , std::function , std::shared_ptr , आदि) द्वारा किया जाता है, यदि एलोकेटर स्टेटलेस है, तो उसके आवंटनकर्ता सदस्य के लिए किसी भी अतिरिक्त संग्रहण पर कब्जा करने से बचें। यह आवश्यक डेटा सदस्यों में से एक (जैसे, begin , end , या vector लिए capacity सूचक) को संग्रहीत करके प्राप्त किया जाता है।

संदर्भ: cppreference



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow