मुझे पता है कि इस सी ++ वर्ग का एक उदाहरण: c| | | |i|i|i|i|s|s| | |
वर्ग गुण/क्षेत्रों जमा हो जाती है कैसे
यह 4/2 पत्र एनोटेशन:
class A {
char c;
int iiii;
short ss;
};
स्मृति में की इस तरह तरह दिखेगा कोई मतलब नहीं है (लेकिन मुझे लगता है कि मेरी बात स्पष्ट है)
1 byte for char
, 3 bytes of padding
, 4 bytes of int
, 2 bytes for the short
, और 2 bytes of tail padding
(मंच निर्भर है, लेकिन यह तर्क नहीं बदलेगा)
(संकलनकर्ता मेरे उदाहरण में फ़ील्ड्स का क्रम बदल नहीं होगा):
Nonstatic डेटा के सदस्यों एक (गैर-संघ) वर्ग उसी पहुंच के साथ नियंत्रण (क्लॉज 11) आवंटित किया जाता है ताकि बाद के सदस्यों के पास कक्षा ऑब्जेक्ट के भीतर पते हो। गैर-स्थैतिक के विभिन्न अभिगम नियंत्रण वाले डेटा सदस्यों को आवंटित करने का आदेश निर्दिष्ट नहीं है (खंड 11)। कार्यान्वयन संरेखण आवश्यकताओं के कारण दो निकट सदस्य एक दूसरे के तुरंत बाद आवंटित नहीं किए जा सकते हैं; तो वर्चुअल फ़ंक्शंस (10.3) और वर्चुअल बेस क्लासेस (10.1) के प्रबंधन के लिए स्थान की आवश्यकता हो सकती है।
इसलिए, मैं जानना चाहता हूं कि यह जावा कक्षाओं के लिए समान है, क्या संकलक पैडिंग को कम करने के लिए आदेश बदल सकता है?
: http://stackoverflow.com/questions/16456366/why-does-the-size-of-a-class इसके बजाय, गुण निम्न क्रम में स्मृति में आयोजित कर रहे हैं ----द-द-द-द-द-द-सदस्य-घोषणा-और http://stackoverflow.com/questions/2006504/c-data-alignment-member-order-inheritance –
जेवीएम विनिर्देश बताता है कि [* लगातार वस्तुओं को क्रमशः कक्षा फ़ाइल में संग्रहीत किया जाता है, बिना पैडिंग या संरेखण *] (https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html)। – Turing85
@NO_NAME मुझे नहीं पता कि आपके लिए क्या समान साधन हैं, लेकिन यह मेरे लिए समान साधन नहीं है। क्या आपने मेरा प्रश्न पढ़ा? –