यह मानना उचित लगता है कि T
और const T
दो प्रकार होंगे जो एक ही आकार के होंगे और एक ही होगा संरेखण, लेकिन कुछ वास्तविक प्रणालियों के बारे में सोचने के बाद, ऐसा लगता है कि वे अलग हो सकते हैं।आकार (टी) == आकार (कॉन्स टी) और alignof (टी) == alignof (कॉन्स टी)
मुझे स्पष्ट करने दें:
मान लीजिए आप स्मृति के दो प्रकार के साथ एक प्रणाली है: राम और फ्लैश (जो केवल पढ़ने के लिए है)। रैम 8 बिट एड्रेसेबल है, जबकि फ्लैश केवल 16 बिट एड्रेसेबल है। मान लीजिए इस T
है:
struct T
{
uint8_t x;
uint16_t y;
};
बाइट पता रैम इस struct 3 बाइट्स लंबा हो जाएगा में .... लेकिन डबल बाइट पता फ्लैश (जहाँ एक const
चर रहते हैं) में इस struct करने के लिए होगा संरेखण के मुद्दों के कारण कम से कम 4 बाइट लंबा हो।
++ मानकों आकार और const
के संरेखण और गैर const
प्रकार की गारंटी सी और सी कार्य करें:
तो यहाँ मेरे सवाल है?
आप बहुत सारी धारणाएं कर रहे हैं जिनकी गारंटी किसी के द्वारा नहीं की जाती है।रैम बनाम अधिकांश चीजें वैसे भी आपकी लिंकर स्क्रिप्ट से आती हैं। –
@ जोनाथन रेनहार्ट इसलिए प्रश्न – DarthRubik
यह सवाल मुश्किल है। जवाब है "हां, उन्हें एक ही आकार होना चाहिए," हालांकि, फ़्लैश ** ** ** नहीं है "जहां 'कॉन्स्ट वेरिएबल रहता है'। हो सकता है कि आप वहां बहुत सारे कॉन्स वैल्यू डाल सकें, लेकिन कॉन्स्ट नहीं करता है मतलब फ्लैश। विशेष रूप से, मेरे पास फ़ंक्शन कॉल के लिए 'कॉन्स्ट int' तर्क हो सकता है, जो स्टैक पर होगा, फ्लैश में नहीं। अंत में, मुझे विश्वास है कि ऐसी प्रणाली सी मेमोरी मॉडल का उल्लंघन करती है, जो समरूप है, तो इसका व्यवहार एक कंपाइलर एक्सटेंशन होगा। –