फ़ौवारा इस बयान एक शून्य चौड़ाई सा क्षेत्र पैदा कर सकता है अगले क्षेत्र अगले कंटेनर सीमा पर गठबंधन किया जाना जहां कंटेनर बिट क्षेत्र के अंतर्निहित प्रकार के रूप में एक ही आकारसी में शून्य लंबाई बिट फ़ील्ड के लिए विभिन्न प्रकार?
व्यवहार में कहें है मानते हैं कि int 2 बाइट्स (16 बिट्स) है और यह टाइपिंग को बचाने के लिए 1 बाइट (8 बिट्स) छोटा है। साथ ही मान लें कि हम जीसीसी कंपाइलर का उपयोग कर रहे हैं (झगड़े के मतभेदों को समझाने के लिए अच्छा होगा)।
struct foo {
unsigned int a:5;
unsigned int :0;
unsigned int b:3;
}
स्मृति में इस लग रहा है
तरहstruct address
|
|
v
aaaaa000 00000000 bbb00000 00000000
प्रश्न 1: मेरी समझ में यह कंटेनर सीधे वर्तमान कंटेनर निम्नलिखित से तालमेल aaaaa000 00000000 0..00bbb00000...
नहीं की तरह देखो, तो bbb
है सकते हैं। क्या यह वास्तव में सच है? अगर मैं
struct bar {
unsigned short x:5;
unsigned int :0;
unsigned short y:7;
}
यह इतना की तरह हो जाएगा निर्दिष्ट
, पर बदल रहे हैं?
struct address
| short stops here short starts
| | |
v v | this is uint | v
xxxxx000 00000000 00000000 yyyyyyy0
संपादित करें 1 यह बताया गया है कि कम से कम समय में 16 बाइट्स नहीं हो सकता। यह इस सवाल में बिंदु के बगल में थोड़ा सा है। लेकिन अगर आप के लिए अपनी महत्वपूर्ण है कि आप के साथ short
कौन सा कंपाइलर? बिटफील्ड में बहुत सारे कार्यान्वयन-विशिष्ट विवरण हैं। –
@CarlNorum ने सवाल संपादित किया। – user10607
टाइप स्विचेस के दौरान भी बिटफील्ड को संरेखण के लिए पैडिंग मिलती है, इसलिए आपका नमूना सही नहीं है। –