नीचे दिए गए कोड के साथ, क्या एक कंपाइलर बता सकता है कि a
वास्तव में B
का एक उदाहरण है और वर्चुअल टेबल लुकअप को अनुकूलित करता है?वर्चुअल टेबल लुकअप का अनुकूलन
#include <iostream>
class A
{
public:
virtual void f()
{
std::cout << "A::f()" << std::endl;
}
};
class B : public A
{
public:
void f()
{
std::cout << "B::f()" << std::endl;
}
};
int main()
{
B b;
A* a = &b;
a->f();
return 0;
}
अतिरिक्त प्रश्न Jonthan सेंग और reima के जवाब के बाद: में मामला जीसीसी प्रयोग किया जाता है, यह किसी भी झंडे का उपयोग करने के लिए मजबूर करने की यह vtable देखने का अनुकूलन करने के लिए आवश्यक हो सकता है?
पक्का पता लगाने के लिए एक ही रास्ता विधानसभा को देखने के लिए है। लेकिन हाँ, devirtualization एक मानक संकलक अनुकूलन है। – Mysticial
बस जीसीसी के लिए डिस्सेप्लर जोड़ा गया। मैंने बुनियादी अनुकूलन के लिए '-O1' ध्वज का उपयोग किया। – reima