struct中内存分配的问题,大概为一下几种情况【VS2010】(一般情况下,在VS2010下分配内存最小单位为4个字节)。
1、如果一个类型所占字节不满4个字节,则从低位向高位占用该字节,如char类型;
2、如果一个类型所占用字节大于4个字节,则求该类型占用字节除以4,然后加1,即为所占字节数;
3、如果一个类型没有占满4个字节,而且接下来的数据类型占用字节数和前一个类型占用字节数之和也没有占满4个字节,则后一个数据紧挨着前一个数据存储,例如char a, char b, a和b所占字节数之和肯定不大于4个字节数,则两者紧挨着存储,假如a的地址为0x00000000,则b的地址为0x00000001;再例如short int c; char d, c和d所占字节数也没有大于4个字节,则两者紧挨着存储,如果c的地址为0x00000000,则d的地址为0x00000002;
4、如果一个类型没有占满4个字节,而且接下来的数据类型占用字节数和前一个类型占用字节数之和大于4个字节,则前一个类型占用4个字节存储,后一个类型接着存储,例如char a, int b, a和b所占用字节数之和大于4个字节,则a占用4个字节存储,b占用4个字节存储,假如a的地址为0x00000000,b的地址为0x00000004.
由于不同编译器处理不一样,所以要想得到适合您所工作环境的结果,最好写一个小的测试程序,查看一下,这样最准确。
1、如果一个类型所占字节不满4个字节,则从低位向高位占用该字节,如char类型;
2、如果一个类型所占用字节大于4个字节,则求该类型占用字节除以4,然后加1,即为所占字节数;
3、如果一个类型没有占满4个字节,而且接下来的数据类型占用字节数和前一个类型占用字节数之和也没有占满4个字节,则后一个数据紧挨着前一个数据存储,例如char a, char b, a和b所占字节数之和肯定不大于4个字节数,则两者紧挨着存储,假如a的地址为0x00000000,则b的地址为0x00000001;再例如short int c; char d, c和d所占字节数也没有大于4个字节,则两者紧挨着存储,如果c的地址为0x00000000,则d的地址为0x00000002;
4、如果一个类型没有占满4个字节,而且接下来的数据类型占用字节数和前一个类型占用字节数之和大于4个字节,则前一个类型占用4个字节存储,后一个类型接着存储,例如char a, int b, a和b所占用字节数之和大于4个字节,则a占用4个字节存储,b占用4个字节存储,假如a的地址为0x00000000,b的地址为0x00000004.
由于不同编译器处理不一样,所以要想得到适合您所工作环境的结果,最好写一个小的测试程序,查看一下,这样最准确。