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

  • 相关阅读:
    Springcloudalibaba之Nacos服务注册和配置中心
    SpringBoot监控工具包Actuator使用
    服务注册中心之Consul使用
    微服务项目SpringcloudAlibaba
    微服务之链路跟踪SpringCloudSleuth
    微服务之消息驱动SpringCloudStream
    微服务之消息总线SpringCloudBus
    微服务之配置中心Config
    深入理解javascript原型和闭包(1)——一切都是对象
    js中函数创建的三种方式
  • 原文地址:https://www.cnblogs.com/dust-fly/p/3670604.html
Copyright © 2011-2022 走看看