sizeof有关问题求解
sizeof问题求解
main()
{
typedef struct
{
char data[10];
}T1;
typedef struct
{
T1* p;
char data[0];
}T2;
printf("%d,%d" , sizeof(T1),sizeof(T2));
getchar();
}
VC运行结果:10,4
我的理解struct 4字节对齐(32bit系统),结果应该是12和8,请高手解释下。谢谢了!
------解决方案--------------------
什么编译器?跟具体编译器实现有关,可以用编译器支持的扩展命令来定制字节对齐策略
------解决方案--------------------
char作为一种特殊的字符,如果结构体内只有char型,一般编译器还是很老实的不对其进行对齐优化的。
T2为4一般认为data没有占用空间。
------解决方案--------------------
按照vs编译器来说:
结构体T1有两种理解方式:
1,char data[10]理解为一个整体,它的大小是10,T1结构中只有data这个元素,所以sizeof(T1)=10是对的.
2,char data[10]可以理解为10个char 如struct T1{char data1;char data2;char data3;....};这个时候在vs中长度应该是:找出宽度最大的元素因为都是char所以最大为sizeof(char)=1,然后结构体中每个元素相对于结构元素首地址都必须能被当前元素整除,这里都是char所以都能整除,最后总大小必须是结构体中最大基本宽度的整数倍,因为这个最大是sizeof(char)=1所以sizeof(T1)=10是对的,
结构体T2:
首先T1* p;长度 sizeof(p)=4没得问题撒,然后char data[0]空数组长度当然为0了,所以sizeof(T2)=4
------解决方案--------------------
10,4
main()
{
typedef struct
{
char data[10];
}T1;
typedef struct
{
T1* p;
char data[0];
}T2;
printf("%d,%d" , sizeof(T1),sizeof(T2));
getchar();
}
VC运行结果:10,4
我的理解struct 4字节对齐(32bit系统),结果应该是12和8,请高手解释下。谢谢了!
------解决方案--------------------
什么编译器?跟具体编译器实现有关,可以用编译器支持的扩展命令来定制字节对齐策略
------解决方案--------------------
char作为一种特殊的字符,如果结构体内只有char型,一般编译器还是很老实的不对其进行对齐优化的。
T2为4一般认为data没有占用空间。
------解决方案--------------------
按照vs编译器来说:
结构体T1有两种理解方式:
1,char data[10]理解为一个整体,它的大小是10,T1结构中只有data这个元素,所以sizeof(T1)=10是对的.
2,char data[10]可以理解为10个char 如struct T1{char data1;char data2;char data3;....};这个时候在vs中长度应该是:找出宽度最大的元素因为都是char所以最大为sizeof(char)=1,然后结构体中每个元素相对于结构元素首地址都必须能被当前元素整除,这里都是char所以都能整除,最后总大小必须是结构体中最大基本宽度的整数倍,因为这个最大是sizeof(char)=1所以sizeof(T1)=10是对的,
结构体T2:
首先T1* p;长度 sizeof(p)=4没得问题撒,然后char data[0]空数组长度当然为0了,所以sizeof(T2)=4
------解决方案--------------------
10,4