2013-05-19 4 views
5

सीओ ++ या सी # में जो ओप कोड मैं लिखता हूं, उदाहरण के लिए मशीन कोड में या सी # के मामले में बाइटकोड में अनुवाद करता है? मेरा मतलब है, ऑब्जेक्ट्स कैसे अनुवाद करते हैं?ऑब्जेक्ट ओरिएंटेड कोड मशीन कोड में कैसे अनुवाद करता है?

प्रक्रियात्मक प्रोग्रामिंग में यह बहुत स्पष्ट है कि यह संकलन के बाद कैसा दिखता है क्योंकि मशीन भाषा में कार्यों के लिए वास्तव में वास्तविक समर्थन है। लेकिन ओओपी प्रोग्रामिंग के मामले में मशीन भाषा में कोई वस्तु नहीं है।

मेरा सिद्धांत यह है कि यह ऑब्जेक्ट को किसी प्रकार की सी जैसे स्ट्रक्चर में संकलित करता है जिसमें केवल डेटा (कोई सदस्य फ़ंक्शंस) नहीं होता है और जब एक मेमबर फ़ंक्शन कहा जाता है, तो यदि कोई ऐडियोनल पैरामीटर स्वीकार करता है जो ऑब्जेक्ट की डेटा स्ट्रक्चर है अपने आप। क्या मैं सही हू?

उत्तर

1

यह कार्यान्वयन निर्भर है। लेकिन व्यावहारिक रूप से, वर्चुअल टेबल ("vtable") का उपयोग करना आम बात है। प्रत्येक वर्ग के लिए वर्चुअल टेबल है, जिसमें प्रत्येक सदस्य फ़ंक्शन के कार्यान्वयन के लिए पॉइंटर्स की एक सूची होती है। प्रत्येक वस्तु उचित vtable के लिए एक सूचक मिलता है।

भाषा और कंपाइलर झंडे के आधार पर, vtable में उपयुक्त पॉइंटर फ़ंक्शन हस्ताक्षर (नाम और तर्क) या बस एक अनुक्रमणिका द्वारा देखा जा सकता है।

जब सदस्य-फ़ंक्शन को इसके vtable पॉइंटर के माध्यम से बुलाया जाता है, तो निश्चित रूप से इसे ऑब्जेक्ट डेटा पर पॉइंटर की आवश्यकता होती है। लेकिन यह ढेर या एक रजिस्टर में पारित किया जा सकता है।

2

अनुमान लगाना, बस उत्पन्न "विधानसभा" देखो (MSIL, वास्तव में) कोई ज़रूरत नहीं कोड:

How can I view MSIL/CIL generated by C# compiler? Why is it called assembly?

+0

और सी ++ मामले के बारे में क्या? उनमें से दोनों को अंत में एक ही संरचना या स्मृति लेआउट में देखना चाहिए? ऐसा करने के लिए एक से अधिक तरीके हो सकते हैं? क्योंकि उदाहरण के लिए आप इस संरचना को कार्यों के साथ भी प्राप्त कर सकते हैं लेकिन मैं पतला हूं कि यह असंभव है क्योंकि अगर ऑब्जेक्ट्स पर एक ही फ़ंक्शन डुप्लिकेट करता है तो यह अधिक मेमोरी खर्च करता है। – UnTraDe

+0

एक "हेलो वर्ल्ड" सी प्रोग्राम लिखें। इसे gcc -o hw hw.c. के साथ संकलित करें मुद्दा objdump -d hw। यह वही कहानी है, केवल औजारों के नाम और विशिष्ट निर्देश क्या परिवर्तन हैं। IOW लक्ष्य सीपीयू अलग है: यह वर्चुअल में .NET है, सी ++ में वास्तविक है। –

0

ओओपी में सभी ऑब्जेक्ट उन्मुख-नस्ल सिर्फ उच्च स्तर के प्रोग्रामिंग निर्माण है ताकि डेवलपर को प्रोटोटाइप और उनके उदाहरण वाले प्रतिमान में मॉड्यूलर और संगठित कोड लिखने में सक्षम बनाया जा सके। ओओपी कोड में मशीन कोड में इसके बराबर नहीं है।

यह और अधिक है कि हमारे पास टाइपस्क्रिप्ट में इंटरफेस कैसे हैं जो तब जावास्क्रिप्ट में अनुवाद करता है जिसमें इंटरफेस की अवधारणा नहीं होती है। (यह एक बहुत अच्छा उदाहरण नहीं हो सकता है)

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