C या C++ में, पूर्णांक प्रकार के डेटा के लिए चार अलग-अलग डेटा टाइप उपयोग किए जाते हैं। ये चार डेटा टाइप हैं short, int, long और long long। इनमें से प्रत्येक डेटा टाइप अलग-अलग मेमोरी स्पेस लेता है। आकार विभिन्न आर्किटेक्चर और विभिन्न ऑपरेटिंग सिस्टम में भिन्न होता है। कभी-कभी int 4-बाइट लेता है या कभी-कभी यह 2-बाइट लेता है। यह कंपाइलर्स के लिए भी होता है। इसलिए हम क्रॉस कंपाइलर्स का उपयोग कर सकते हैं।
क्रॉस कंपाइलर मूल रूप से एक कंपाइलर है, जो वर्तमान प्लेटफॉर्म के अलावा किसी अन्य प्लेटफॉर्म के लिए कंपाइल करने में सक्षम है।
इसलिए यदि हम निम्नलिखित कोड को 32-बिट सिस्टम और 64-बिट सिस्टम में कंपाइल करना चाहते हैं, तो यह अलग-अलग आउटपुट उत्पन्न करेगा।
उदाहरण
#include<stdio.h> int main() { printf("Size of int : %ld Bytes\n", sizeof(int)); printf("Size of long : %ld Bytes\n", sizeof(long)); printf("Size of long long : %ld Bytes", sizeof(long long)); }
आउटपुट
Size of int : 4 Bytes Size of long : 4 Bytes Size of long long : 8 Bytes
आउटपुट
Size of int : 4 Bytes Size of long : 8 Bytes Size of long long : 8 Bytes
इस उदाहरण से हम आसानी से समझ सकते हैं कि long डेटा टाइप कंपाइलर से भिन्न होता है। इसके पीछे क्या कारण है?
CPU मेमोरी एड्रेस रजिस्टर (MAR) का एड्रेस प्रदान करके प्राइमरी मेमोरी (RAM) से डेटा कॉल करता है। जब स्थान मिल जाता है, तो इसे मेमोरी बफर रजिस्टर (MBR) में स्थानांतरित कर दिया जाता है। डेटा आगे के उपयोग के लिए CPU रजिस्टर में संग्रहीत होता है। इसलिए डेटा बस का आकार CPU रजिस्टर का आकार निर्धारित करता है। 32-बिट सिस्टम के लिए, यह एक समय में केवल 4-बाइट डेटा कॉल कर सकता है। यदि डेटा 32-बिट से बड़ा है, तो इसे दो साइकिल लगेंगी। इसलिए छोटे डेटा के लिए यह कोई अंतर नहीं डालता।