zoukankan      html  css  js  c++  java
  • 31 位域、空类的sizeof值

    1 分析下列程序:

    #include<iostream>
    using namespace std;
    struct s
    {
    int x: 3;
    int y: 4;
    int z: 5;
    double a;
    };
    int main() {
    cout<<sizeof(s)<<endl;
    return 0;
    }
    

      求sizeof(s)的结果为 16.

    分析:看清楚结构体中是位操作,三个变量共占用一个int 类型的大小,int 类型占用4个字节,double占用8个字节,为实现内存对齐,int类型需要填充4个字节的长度。

    x,y,z分别占用3,4,5位,int是4个字节32位,相当于xyz占用4个字节,double占8个字节,按照对齐原则,前面补4位,4+4+8=16.有一个条件是默认8字节对齐,如果前面加上一句#pragma pack(4)//设定为4字节对齐,结果就是12.

    C结构体之位域(位段)

    windows 32位操作系统中,假设字节对齐为4,对于一个空的类A,sizeof(A)的值为:1、

    #include<iostream>
    using namespace std;
    class A
    {
    };
    int main() {
    	cout<<sizeof(A)<<endl;
    	return 0;
    }

    分析:C++对空类或者空结构体,对其sizeof操作时候,默认都是1个字节。如果类为空,结果是1.

    #include<iostream>
    using namespace std;
    class A
    {
    	char b[0];
    };
    int main() {
    	cout<<sizeof(A)<<endl;
    	return 0;
    }
    

     如果在类中定义了变量,那就是变量size,char b[0]长为0,所以大小为0

    类的实例化是在内存中分配一块地址,每个实例在内存中都有独一无二地址。同样空类也会实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化后就会有独一无二地址。所以空类的sizeof为1,而不是0.多重继承的空类大小也是1.

     

     

    C++学习(13)

    拥抱明天! 不给自己做枷锁去限制自己。 别让时代的悲哀,成为你人生的悲哀。
  • 相关阅读:
    在Unity3D中开发的Hologram Shader
    在Unity3D中开发的Toon Shader
    在Unity3D中开发的Dissolve Shader
    2017.2.26
    2017.2.21
    2017.2.20
    2017.2.19
    2017.2.18
    2017.2.17<转>
    2017.2.16 linux
  • 原文地址:https://www.cnblogs.com/dd2hm/p/7462128.html
Copyright © 2011-2022 走看看