2016-04-17 7 views
13

उन कंपाइलर कार्यान्वयन के लिए जो vtables का उपयोग करते हैं: क्या ऐसे कोई मामले हैं जब वर्चुअल फ़ंक्शन टेबल रन टाइम पर बदल जाते हैं? या vtables केवल संकलन समय पर भरे हुए हैं, और रन टाइम पर उन्हें संशोधित करने के लिए कोई कार्रवाई नहीं की जाती है?रनटाइम पर Vtable संशोधनों

+2

आप किस तरह के रनटाइम संशोधनों को उपयोगी/संभव होने पर विचार करते हैं? –

+2

@ चीयर्संधथ.-अल्फ अगर यह एक सादा सी ++ प्रोग्राम है, तो यह मूर्खतापूर्ण है। लेकिन अगर वह (अब या भविष्य में) को वीएम या इंटरपरेटर/जेआईटी कंपाइलर की तरह कुछ लिखना होगा, तो मैं अपने प्रश्न को इतनी जल्दी नहीं छोड़ूंगा –

+0

यह आईपी है ... ऐसे डिजाइन के साथ आने में बहुत मुश्किल है थ्रेड-सुरक्षित, तो यह नहीं किया गया है। –

उत्तर

8

मुझे किसी भी सी ++ एबीआई के बारे में पता नहीं है जो पॉलिमॉर्फिज्म कार्यान्वयन के साथ है जो रनटाइम पर वर्चुअल टेबल बदलता है।

यह बहुत उपयोगी नहीं होगा, वैसे भी, क्योंकि वर्चुअल टेबल आमतौर पर कोड की संपत्ति का वर्णन करते हैं (वर्ग पदानुक्रम में एक दूसरे के w.r.t. स्थिति के सदस्य कार्य का संबंध) और सी ++ कोड रनटाइम पर नहीं बदलता है।

और क्योंकि यह उपयोगी नहीं होगा, यह अपमानजनक होगा।

+0

vtables execurable छवि में कोड अनुभाग या डेटा अनुभाग पर जाना है? –

+2

@KarolisM ilieška: किस कार्यान्वयन के तहत? और आपको क्यों जानने की ज़रूरत है? –

+0

विशिष्ट होने के लिए: एआरएम कील, लेकिन यह जीसीसी हाथ के लिए भी लागू होता है। 1. मैं सिर्फ उत्सुक हूं, 2. मैं एम्बेडेड सिस्टम के साथ काम करता हूं और कभी-कभी यह जानने के लिए पर्याप्त होता है कि कुछ वर्ग कहां रखना है। –

2

संक्षिप्त उत्तर नहीं है।

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

  1. उद्देश्य-सी (++)

  2. हाथ से कोड अपने खुद के प्रेषण तंत्र

  3. :

    आप वस्तुओं रन टाइम के दौरान वर्ग बदलना चाहते हैं तो आप विकल्पों में से एक संख्या है

  4. पायथन/जावास्क्रिप्ट आदि अल।

  5. (सबसे अच्छा विकल्प) आपके डिजाइन पर पुनर्विचार करें।

+1

यह vtable नहीं है जो बदलता है। यह विनाश के तहत वस्तु का vptr सदस्य है! –

+0

भी, 'std :: function' को रनटाइम पर फिर से असाइन किया जा सकता है, इसलिए यह एक और विकल्प –

+0

@KerrekSB तय है, हालांकि मुझे यकीन है कि बेहतर शब्द –

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