标签:
#include <stdio.h> //#define _TEST // 切换显示不同结构体排列,内存空间占用情况 //----------------------联合体定义---------------------- typedef union { unsigned char uiVal; // 联合体的大小是1Byte struct { unsigned char bit0 :1; unsigned char bit1 :1; unsigned char bit2 :1; unsigned char bit3 :1; unsigned char bit4 :1; unsigned char bit5 :1; unsigned char bit6 :1; unsigned char bit7 :1; }Byte; }MyUnion; //----------------------结构体定义---------------------- typedef struct { #ifdef _TEST // 变量排列顺序1 // 对于 Data0 先开辟一个 4Byte空间 但是它本身只占用了 1Byte 剩余3Byte // 然后 Data1 试图去紧挨着 Data0 存放 但是发现只能存放3Byte 还有1Byte没地方存放,所以它再次开辟4Byte空间来存放自己 // 最后 Data2 发现 Data1 已经独占了 4Byte空间 自己也重新开辟 4Byte空间 // 因此,总共占用空间为 4+4+4 = 12Byte // 其中第一个 4Byte空间只存放了 1Byte的变量 其余3Byte闲置 // 第三个4Byte空间也值存放了2Byte 闲置2Byte unsigned char Data0; // 1Byte unsigned int Data1; // 4Byte unsigned short int Data2; // 2Byte #else // 变量排列顺序2 // 对于 Data0 先开辟一个 4Byte空间 但是它本身只占用了 1Byte 剩余3Byte // 然后 Data1 发现 Data0 开辟的4Byte空间还有3Byte是空的 而自己本身只需要2Byte空间就够了 所以就紧挨着 Data0 存放 // 最后 Data2 发现 Data0 Data1 在第一个4Byte空间中已经用去了3Byte 仅剩1Byte空间 而自己需要4Byte空间 所以需要重新开辟 4Byte空间 // 因此,总共占用空间为 4+4 = 8Byte // 其中第一个 4Byte空间只存放了 3Byte的变量 其余1Byte闲置 unsigned char Data0; // 1Byte unsigned short int Data1; // 2Byte unsigned int Data2; // 4Byte #endif }RECORD; //----------------------用户变量---------------------- MyUnion DataVal; RECORD m_Record; // 统计数据 //----------------------主函数---------------------- void main() { //---------------------- DataVal.uiVal = 0x79; printf("sizeof_MyUnion = %d Byte \n\n",sizeof(DataVal.uiVal)); printf("DataVal.Byte.bit7 = %d \n",DataVal.Byte.bit7); printf("DataVal.Byte.bit6 = %d \n",DataVal.Byte.bit6); printf("DataVal.Byte.bit5 = %d \n",DataVal.Byte.bit5); printf("DataVal.Byte.bit4 = %d \n",DataVal.Byte.bit4); printf("DataVal.Byte.bit3 = %d \n",DataVal.Byte.bit3); printf("DataVal.Byte.bit2 = %d \n",DataVal.Byte.bit2); printf("DataVal.Byte.bit1 = %d \n",DataVal.Byte.bit1); printf("DataVal.Byte.bit0 = %d \n\n\n",DataVal.Byte.bit0); //---------------------- m_Record.Data0 = 0x12; m_Record.Data1 = 0x34; m_Record.Data2 = 0x56; printf("sizeof_m_Record.Data0 = %d \n",sizeof(m_Record.Data0)); printf("sizeof_m_Record.Data1 = %d \n",sizeof(m_Record.Data1)); printf("sizeof_m_Record.Data2 = %d \n",sizeof(m_Record.Data2)); printf("sizeof_m_Record = %d Byte \n",sizeof(m_Record)); }
标签:
原文地址:http://www.cnblogs.com/zhangfan2014/p/4651935.html