Friday 15 August 2014

c - Is this the correct explanation for this output of this program? -


  # शामिल हैं & lt; stdio.h & gt; Int main () {struct परीक्षण {char c; Int y; फ्लोट आर; डबल डी; } टी 1; printf ( "% d \ n", sizeof (t1)); वापसी 0; }   

आउटपुट: 24 पर मेरे जीसीसी 4.3.2 उबंटू 12.04

आउटपुट: 20 आइडियान पर

मेरा स्पष्टीकरण: मुझे लगता है 24 सही है मुझे सही है अगर मैं गलत हूँ?

  1. पहला हिस्सा चार 'सी' द्वारा लिया जाएगा 1 बाइट पैडिंग के 3 बाइट के बाद खुद के लिए।
  2. दूसरा हिस्सा पूर्णांक 'वाई' द्वारा लिया जाएगा (इस मामले में कोई पैडिंग आवश्यक नहीं है क्योंकि पूर्णांक 4 बाइट की है, इसलिए यह पूरी तरह से भर जाएगा)।
  3. तीसरा हिस्सा फ्लोट 'आर' द्वारा लिया जाएगा (फ्लैप के रूप में आवश्यक कोई पैडिंग 4 बाइट्स की भी नहीं है)।
  4. अब अगले 4 बाइट्स का टुकड़ा गड़बड़ा जाएगा क्योंकि अगले दोहरे और भंडारण पते को उस डेटा प्रकार के आकार के एक से अधिक होना चाहिए।
  5. और प्रत्येक 4 बाइट्स के अगले 2 भाग को डबल वैरिएबल पर कब्जा कर लिया जाएगा।

    इस प्रकार Size = 1 (char) + 3 (चार मामले में पैड ) + 4 (इंट) + 4 (फ्लोट) + 4 (डबल के लिए गद्दे) + 8 (डबल) = 24

    स्पष्टता के लिए:

    चूंकि खंड 4 बाइट संग्रह में लिया जाता है। इसलिए हर पता 4 से अधिक हो जाएगा। डबल के लिए, अगला पता 1012 होना चाहिए। लेकिन यह 8 का बहुवचन नहीं है। तो यह पैड! और 1016 से शुरू करें स्मृति लेआउट मेरा प्रश्न - 24 सही है और मेरा स्पष्टीकरण सही है या मेरी व्याख्या गलत है अन्य कृपया समझाने के लिए?

    आपका स्पष्टीकरण इस प्रकार सही है कि विशिष्ट संकलक एक उस संरचना के लिए एक विशिष्ट लेआउट के साथ बाइनरी अगर आपने सही ढंग से आउटपुट की भविष्यवाणी की है, तो आपकी भविष्यवाणी निश्चित रूप से सही है इस विशेष समय पर आपके विशिष्ट सेटअप के लिए

    लेकिन संरचना का आकार, किसी भी तरह से नहीं है , सख्ती से सी में परिभाषित किया गया है। इस विषय में परिभाषित होने वाली केवल एक चीज संरचना सदस्यों का क्रम है और पहले सदस्य की ऑफसेट है। पैडिंग और, इसलिए, स्ट्रैट का कुल आकार अनिर्धारित है और इसे कंपाइलर के लिए एक निर्णय के रूप में छोड़ दिया गया है। जाहिर है, मुख्य कारण एक संकलक संरचना पैड होगा अपने व्यक्तिगत प्रकार (जैसा कि आपने ठीक से नोट किया था) के आधार पर सदस्यों के उचित संरेखण के माध्यम से उच्च प्रदर्शन। लेकिन (और यह यहां महत्वपूर्ण है) संकलक लक्ष्य आर्किटेक्चर के आधार पर सबसे कुशल पैडिंग चुनता है। यदि किसी आर्किटेक्चर की 128-बिट इंट है, उदाहरण के लिए, आप कल्पना कर सकते हैं कि आपके स्ट्रैट का आकार अलग-अलग कैसे होगा।

    तो, यदि यह सी भाषा के परिभाषित पहलुओं की बात आती है (या आपने जो वर्णित किया है उसके अलावा कोई अन्य सेटअप) आपकी भविष्यवाणी बेकार होगी यह स्वाभाविक रूप से कुछ सेट अप मैच करता है, लेकिन केवल दुर्घटना से।

No comments:

Post a Comment