首页 > 其他 > 详细

sizeof struct

时间:2014-04-18 22:17:27      阅读:778      评论:0      收藏:0      [点我收藏+]

今天创建constantBuffer给shader使用时一直不成功:

struct LightStruct
{
XMFLOAT4 lightColor;
XMFLOAT3 lightDir;
// float ss;//
};

createBuffer时,constant lightStruct的buffer一直vptr什么异常,  lightStruct的sizeof为28而不是32(我原以为lightstruct的大小会使XMFLOAT4的倍数)。

3)结构体总大小为结构体最宽基本类型大小的整数倍。(而XMFLOAT4基本类型为float),所以最终为28

1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;

2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);

struct MyStruct
{

char dda;//偏移量为0,满足对齐方式,dda占用1个字节;

double dda1;//下一个可用的地址的偏移量为1,不是sizeof(double)=8的倍数,需要补足7个字节才能使偏移量变为8(满足对齐方式,因此VC自动填充7个字节,dda1存放在偏移量为8的地址上,它占用8个字节

int type;//下一个可用的地址的偏移量为16,是sizeof(int)=4的倍数,满足int的对齐方式,所以不需要VC自动填充,type存放在偏移量为16的地址上,它占用4个字节。
};//所有成员变量都分配了空间,空间总的大小为1 7 8 4=20,不是结构的节边界数(即结构中占用最大空间的类型所占用的字节数sizeof 字串2(double)=8)的倍数,所以需要填充4个字节,以满足结构的大小为

//sizeof(double)=8的倍数。

所以该结构总的大小为:sizeof(MyStruc)为1 7 8 4 4=24。其中总的有7 4=11个字节是VC自动填充的,没有放任何有意义的东西。

sizeof struct,布布扣,bubuko.com

sizeof struct

原文:http://www.cnblogs.com/dust-fly/p/3670604.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!