मुझे पता है कि जब स्रोत कोड, सी ++ में, संकलित किया जाता है, तो संकलक से आउटपुट मशीन कोड (निष्पादन योग्य) है जो मुझे लगा कि सीधे सीपीयू को निर्देश थे। हाल ही में मैं गुठली पर पढ़ रहा था और मुझे पता चला कि प्रोग्राम सीधे हार्डवेयर तक नहीं पहुंच सकते हैं लेकिन कर्नेल के माध्यम से जाना है।
इसलिए जब हम कुछ सरल स्रोत कोड संकलित करते हैं, तो बस एक printf()
फ़ंक्शन के साथ कहते हैं , और संकलन निष्पादन योग्य मशीन कोड का उत्पादन करता है, क्या इस मशीन कोड में प्रत्येक निर्देश सीधे मेमोरी से निष्पादित किया जाएगा (एक बार कोड ओएस द्वारा मेमोरी में लोड हो जाता है) या होगा मशीन कोड में प्रत्येक कमांड को अभी भी निष्पादित होने के लिए ओएस (कर्नेल) से गुजरना होगा?
मैंने एक ऐसा ही सवाल पढ़ा है । यह नहीं बताया कि संकलन के बाद उत्पन्न मशीन कोड सीधे सीपीयू के लिए एक निर्देश है या यदि सीपीयू के लिए सही निर्देश बनाने के लिए इसे फिर से कर्नेल के माध्यम से जाना होगा। यानी, मशीन कोड को मेमोरी में लोड करने के बाद क्या होता है? क्या यह कर्नेल के माध्यम से जाएगा या सीधे प्रोसेसर से बात करेगा?
printf
एक महान उदाहरण नहीं है। यह सी कल्पना द्वारा स्पष्ट रूप से परिभाषित किया गया है एक फ़ंक्शन के रूप में जो केवल "होस्टेड" कार्यान्वयन में उपलब्ध है (मतलब एक कर्नेल पर चल रहा है, "फ्रीस्टैंडिंग" के विपरीत, जिसे एक की आवश्यकता नहीं हो सकती है)। और अधिकांश प्लेटफार्मों पर, printf
आपके द्वारा प्रदान किया गया एक फ़ंक्शन है libc
जो आपकी ओर से सामान का एक गुच्छा करता है (जिसमें अंततः स्टडआउट में प्रिंट करने के लिए एक syscall शामिल है)। यह वास्तव में कॉल करने से अलग नहीं है libvlc_media_list_add_media
या PyObject_GetAttr
, सिवाय इसके कि कुछ printf
कार्यान्वयन अतिरिक्त गैर-मानक -l
एस को जोड़ने के बिना लिंकेबल की गारंटी है ।