सी चीजों को कैसे पास करता है, इस तंत्र के बारे में मुझे पता है कि यह एक रजिस्टर या स्टैक के माध्यम से किया जाता है।सी में फ़ंक्शन तर्क कैसे पारित किए जाते हैं?
रजिस्टर या ढेर? बिल्कुल कैसे?
सी चीजों को कैसे पास करता है, इस तंत्र के बारे में मुझे पता है कि यह एक रजिस्टर या स्टैक के माध्यम से किया जाता है।सी में फ़ंक्शन तर्क कैसे पारित किए जाते हैं?
रजिस्टर या ढेर? बिल्कुल कैसे?
दोनों। और सम्मेलन मंच द्वारा अलग-अलग होंगे।
x86 पर, मान आमतौर पर स्टैक द्वारा पारित होते हैं। X64 पर, रजिस्टर द्वारा गुजरना पसंद है।
सभी मामलों में, यदि आपके पास बहुत से पैरामीटर हैं, तो कुछ को स्टैक द्वारा पारित किया जाना होगा।
(जैसा कि कहा कुछ compilers अलग ढंग से यह काम हो जाएगा) सामान्य कार्य के लिए कहता है वे ढेर पर पारित कर रहे हैं x86 calling conventions
यह भी ध्यान दिया जाना चाहिए कि किसी दिए गए आर्किटेक्चर के लिए भी सम्मेलन बुलाए जाने में मतभेद हैं। उदाहरण के लिए 'cdecl' (लिनक्स में उपयोग किया जाता है?) और' stdcall' (WinAPI?) की तुलना करें। –
सहमत हुए। उस विकिपीडिया पेज के निचले हिस्से में एक चार्ट है जो अलग-अलग ओएस पर और उसी ओएस के भीतर भी विभिन्न सम्मेलनों को दिखाता है। – Mysticial
@ माइस्टिकल यह एक अच्छा लिंक है - लेकिन मुझे लगता है कि उत्तर के साथ/साथ कुछ अतिरिक्त जानकारी डाली जानी चाहिए। –
आमतौर पर देखें। आमतौर पर यह पुश निर्देशों की एक श्रृंखला है जो डेटा को ढेर पर रखती है।
सिस्टम कॉल जैसे विशेष मामले हैं जहां पैरामीटर असेंबली निर्देशों और रजिस्टरों के माध्यम से पारित होते हैं। हार्डवेयर मामलों में वे रजिस्टरों या यहां तक कि कुछ अंतराल संकेतों के माध्यम से पारित होते हैं जो परिणामस्वरूप रजिस्टरों को लिखते हैं।
रजिस्ट्रारों की उच्च संख्या वाले आर्किटेक्चर पर उन्हें आमतौर पर कुछ आरआईएससी और 64 बिट आर्किटेक्चर जैसे रजिस्टरों के माध्यम से पारित किया जाता है।
तकनीकी रूप से, यह एक कार्यान्वयन विस्तार है, और इसलिए प्रत्येक सी संकलक फ़ंक्शन तर्कों को पारित करना चुन सकता है हालांकि यह चाहता है। – jwodder