gcc (GCC) 4.7.0
c89
x86_64
हैलो,__attribute __ (__ packed__) का उपयोग करके गद्देदार संरचनाएं, क्या यह वास्तव में इसके लायक है?
मैं सोच रहा हूँ कि यह __attribute__ ((__packed__))
ढांचे पर का उपयोग कर का उपयोग कर के लायक है। ऐसा लगता है कि इसके साथ संरचना आकार में छोटा हो जाएगा। परीक्षण द्वारा जाकर मैंने नीचे प्रदर्शन किया है। तो इसका उपयोग आकार में एक फायदा होगा।
इसका उपयोग करने के लिए कोई मामला नहीं है, क्योंकि यह अन्य कंपाइलरों में पोर्टेबल नहीं है। तो दृश्य स्टूडियो सी ++ के लिए यह काम नहीं करेगा। इसके अलावा अन्य कंपाइलर्स भी।
क्या संकलक कोड को अनुकूलित नहीं करता है? तो वास्तव में यह तय करने के लिए संकलक को छोड़कर प्रदर्शन के लिए बेहतर क्या होगा?
संरेखित विशेषता का उपयोग करना कोई फर्क पड़ता है? __attribute__((packed, aligned(4)))
जब मैं कहा कि यह किसी भी सुझाव के लिए 12.
बहुत धन्यवाद के आकार लौटे,
#include <stdio.h>
struct padded {
int age; /* 4 */
char initial; /* 1 + 3 padded bytes */
int weight; /* 4 --> total = 12 */
};
struct __attribute__ ((__packed__)) unpadded {
int age; /* 4 */
char initial; /* 1 */
int weight; /* 4 --> total = 9 */
};
int main(int argc, char **argv)
{
struct padded padded_test;
struct unpadded unpadded_test;
printf("Padded [ %ld ]\n", sizeof(struct padded));
printf("Unpadded [ %ld ]\n", sizeof(struct unpadded));
return 0;
}
असाइन की गई मेमोरी एक्सेस धीमी है – BlackBear
अपनी उदाहरण संरचना के लिए, इसे पैक करना * और * 4-संरेखित करना विशेष रूप से गैर-सार्थक है। आप किसी भी स्थान को सहेजते नहीं हैं, आप केवल 'वज़न' फ़ील्ड को डिज़ाइन करते हैं। ऐसा करने का एकमात्र कारण यह है कि इस तरह से परिभाषित कुछ पूर्व-मौजूदा लेआउट से मेल खाना है (और यहां तक कि यह भी मानता है कि आपके प्लेटफॉर्म पर 'int' का ऑब्जेक्ट प्रस्तुति' आयु' फ़ील्ड इत्यादि के लिए सही है)। –