मैं 64-बिट प्लेटफ़ॉर्म पर uint32_t प्रकारों के संरेखण के बारे में उत्सुक हूं। कल्पना का कहना है कि uint32_t बिल्कुल दिया bitwidth, वास्तव में यह हो रहा है जो होना चाहिए:uint32_t संरेखण?
> printf("sizeof(uint32_t): %zd\n", sizeof(uint32_t));
sizeof(uint32_t): 4
लेकिन तब मैं एक struct है:
typedef struct A {
uint32_t a;
uint32_t b;
} A;
लेकिन, आश्चर्य की बात:
> printf("sizeof(A): %zd\n", sizeof(A));
sizeof(A): 16
क्या Uint32_t किसी कारण से 8-बाइट गठबंधन किया जा रहा है? क्या यह वास्तव में नीचे 8-बाइट प्रकार है?
कंपाइलर क्या है और वास्तुकला क्या है? – ouah
x86-64 –
पर gcc 4.4.5 ध्यान दें कि सरणी के तरीके के कारण, 'uint32_t' * की संरेखण आवश्यकता * आकार (uint32_t)' से कम या बराबर होनी चाहिए। 'UintN_t' प्रकारों में कोई पैडिंग नहीं होने की आवश्यकता के कारण,' sizeof (uint32_t) * CHAR_BIT == 32'। कुछ और सी 99 के अनुरूप नहीं है। हालांकि, आपके 'स्ट्रक्चर ए' के संरेखण को सी 99 द्वारा किसी भी सदस्य का सबसे बड़ा संरेखण करने की अनुमति है। –