zoukankan      html  css  js  c++  java
  • sizeof struct

    今天创建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自动填充的,没有放任何有意义的东西。

  • 相关阅读:
    原型模型
    V模型
    瀑布模型
    微服务的特点 优点 缺点
    ip地址的分类
    DSSA特定领域软件体系结构
    Git操作 :从一个分支cherry-pick多个commit到其他分支
    【原理】从零编写ILI9341驱动全过程(基于Arduino)
    Arduino驱动ILI9341彩屏(一)——颜色问题
    STL库学习笔记(一)——什么是STL?
  • 原文地址:https://www.cnblogs.com/dust-fly/p/3670604.html
Copyright © 2011-2022 走看看