c++ - Does this have anything to do with endian-ness? -


इस कोड के लिए:

  # include & lt; stdio.h & gt; शून्य हैलो () {printf ("हैलो \ n"); } शून्य बाइट () {printf ("बाय \ n"); } Int main () {printf ("% p \ n", हैलो); Printf ("% p \ n", बाय); वापसी 0; }  

मेरे मशीन पर आउटपुट:

  0x80483f4 0x8048408  

[दूसरा पता मूल्य में बड़ा है]

पर

  0x 8048541 0x8048511  

[दूसरा पता मूल्य में छोटा है]

क्या यह करने के लिए कुछ भी है मशीनों की अंत्यता के साथ? यदि नहीं, तो

  • पते के क्रम में अंतर क्यों

  • इसके अलावा, अंतर में अंतर क्यों?

    0x8048541 - 0x8048511 = 0x30

    0x8048408 - 0x80483f4 = 0x14

< घंटा>

बीटीडब्ल्यू, मैंने अभी जांच की यह कोड (से लिया गया) कहता है कि दोनों मशीनें हैं

  # include & lt; stdio.h & gt; Int main () {int num = 1; If (* (char *) & amp; num == 1) printf ("लिटिल एंडियन \ n"); अन्य प्रिंटफ़ ("बिग-एंडियन \ n"); वापसी 0; }  

इसका अंतरालन के साथ कुछ भी नहीं है, लेकिन सी ++ मानक के साथ। सी ++ को उन कार्यों को लिखने के लिए जरूरी नहीं है, जिन्हें आप उन्हें डिस्क में देख सकते हैं (और क्रॉस-फाइल को जोड़ने के बारे में सोचें और यहां तक ​​कि अन्य पुस्तकालयों को लिंक करने के बारे में सोचें, जो कि अभी संभव नहीं है), यह उन्हें किसी भी क्रम में लिख सकता है।

वास्तविक मूल्यों के बीच के अंतर के बारे में, एक संकलक स्मृति ओवरराइड (या अन्य संबंधित सामान, आमतौर पर केवल डिबग मोड में) को रोकने के लिए एक ब्लॉक के आसपास गार्ड जोड़ सकता है। और कुछ भी नहीं है जो आपके 2 फ़ंक्शंस के बीच अन्य फ़ंक्शन लिखने से कंपाइलर को रोकता है। ध्यान रखें कि यहां तक ​​कि एक सरल हैलो विश्व अनुप्रयोग निष्पादन योग्य कोड के हजारों बाइट्स के साथ आता है।

नीचे पंक्ति यह है: कभी भी कुछ भी नहीं मानती कि कैसे चीजें स्मृति में तैनात होती हैं आपकी मान्यताओं को लगभग हमेशा गलत होगा और क्यों भी लगता है?

सामान्य, सुरक्षित, संरचित कोड लिखने से प्राप्त करने के लिए कुछ भी नहीं है।

Comments