zoukankan      html  css  js  c++  java
  • C++ 中的sizeof(转载)

    sizeof(datatype),这些跟这些数据类型在内存中的字节数相等,比如,sizeof(int)=4,因为在大多数的32位机和64位机里的int类型数据所占的字节数都是4。

    然后说说sizeof()某个类的值,总的来说,某个类的sizeof()的值等于其所有成员变量所占字节数的和,但是,静态变量由于存在于堆里,所以不计算在内。而virtual 函数因为会有个指针,所以也会存在一个指针所占的字节数。

    通过上面的方法计算出的结果为0的类中,VC++都将其改为了1.原因是,一个类的sizeof()为0.假设为A。

    class A{};

    A obj_a;

    int b;

    那么我们对obj_a的内存操作将会影响到b。

    但是GNU C/ C++里面在3.4. 3版本里还是没有处理完全,在一个类里只存在一个空数组的时候,其sizeof()的值为0。在较新的版本里或许已经修改了,由于我用的是mingw所以不清楚。

    其实具体的是多少,最好还是自己编译运行一下。下面符上我运行后出来的值。

    -------------------------------------

    /**********************************
    *     sizeof()的class与类型值
    **********************************/


    #include<iostream>
    using std::cout;
    using std::endl;
    class A{};         //空类
    class B{
    virtual void foo();
    };                 //虚函数
    class C{
    char cstr[0];
    };                 //空数组
    class D{
    static int sta;
    };                //静态变量
    class E{
    void foo2();
    static int stat;
    };                //静态变量和一个函数

    int main()
    {
    void *ptr;
    cout<<sizeof(A)<<endl;
    cout<<sizeof(B)<<endl;
    cout<<sizeof(C)<<endl;
    cout<<sizeof(D)<<endl;
    cout<<sizeof(E)<<endl;
    cout<<"----------------"<<endl;
    cout<<sizeof(bool)<<endl;
    cout<<sizeof(char)<<endl;
    cout<<sizeof(short)<<endl;
    cout<<sizeof(int)<<endl;
    cout<<sizeof(long)<<endl;
    cout<<sizeof(float)<<endl;
    cout<<sizeof(double)<<endl;
    cout<<sizeof(ptr)<<endl;
    system("pause");
    return 0;
    }

    /*-------------------
    sizeof(A)==1;
    sizeof(B)==sizeof(ptr);
    sizeof(C)==0; //vc里是1,g++是0
    sizeof(D)==1;
    sizeof(E)==1;
    ----------------------
    sizeof(bool)==1;
    sizeof(char)==1;
    sizeof(short)==2;
    sizeof(int)==4;
    sizeof(long)==4;
    sizeof(float)==4;
    sizeof(double)=8;


    void * ptr;
    sizeof(ptr)==4;//x86
    sizeof(ptr)==8;//x64

  • 相关阅读:
    iOS开发 日常错误积累
    Linux编程---I/O部分
    Binder机制1---Binder原理介绍
    hdu4405概率dp入门
    SSL连接建立过程分析(1)
    用GDB调试程序(一)
    RBAC权限管理
    HDU3930(离散对数与原根)
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 产生数
  • 原文地址:https://www.cnblogs.com/waterdragon/p/2125527.html
Copyright © 2011-2022 走看看