c++ - does memcmp work for non-flat struct? -
संरचना फ्लैट {int a1; इंट ए 2; } // एक पदानुक्रमित स्ट्रक्चर जिसमें एक स्ट्रक्चर एट्रिब्यूट स्ट्रक्चर वाला गैरफाइट {फ्लैट बी 1; इंट बी 2; } फ्लैट एफ 1, एफ 2; मेरे कंपाइलर में यह काम करता है, अर्थ f1.a1 == f2.a1, f1
मेम्कम्प (& amp; एफ 1, & amp; एफ 2, आकार F1) A2 == f2.a2 & lt; => memcmp (f1, f2) == 0;
<पूर्व> नॉनफ़्लैट एन 1, एन 2; Memcmp (& amp; n1, & amp; n2, sizeof n1) // क्या यह पैडिंग को देखते हुए गैर-फ्लैट स्ट्रैक्ट्स के लिए भी काम करता है?
मुझे लगता है कि इसे गैर-फ्लाट स्ट्रेंक्ट्स के लिए भी काम करना चाहिए। हालांकि, मेरे कंपाइलर में, गैर-फ्लैट स्ट्रैक्ट्स के लिए, ऐसा लगता है कि सदस्य विशेषताएँ समान हैं, memcmp का परिणाम इंगित करता है कि वे अलग हैं।
सी लायब्रेरी फ़ंक्शन मेमोरी स्थानों की बाइट-बाय-बाइट तुलना करता है। जैसा कि @ एमएमटर्स ने सही ढंग से बताया है, इस तुलना में किसी भी और सभी पैडिंग बाइट्स शामिल होंगे।
यह आपकी परवाह नहीं करता कि क्या आपके फ्लैट फ्लैट या फ्लैट के किसी भी परिभाषा के लिए फ्लैट या गैर-फ्लैट हैं संरचना के बारे में कुछ भी इसके बारे में परवाह नहीं है या पता नहीं है
बाइट बराबर हैं, तो यह सत्य वापस आ जाएगा। अन्यथा यह गलत लौटाएगा।
निहितार्थ यह है कि, किसी भी संरचना के लिए जिनके सदस्यों को रखा गया है मेमोरी में संयोग से, यदि सभी फ़ील्ड मैच होंगे तो यह मैच होगा। पॉइंटर्स के साथ स्मृति में अन्य स्थानों पर किसी भी संरचना के लिए, यह उन संकेतकों का पालन नहीं करेगा कि वे स्मृति को इंगित करने के लिए इंगित करते हैं, परन्तु इसके बजाय केवल सूचक में संग्रहीत शाब्दिक पते पर नज़र डालें और देखें कि वह मेल खाता है।
< / div>
Comments
Post a Comment