• 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

  • 相关阅读:
    Session_End引发的性能问题!
    可能引发性能问题的几个写法,看看你占哪一个.
    优化你的DiscuzNT3.0,让它跑起来(2)发帖回帖篇
    什么是经济学
    生产可能性边界和机会成本
    九宫格的实现(转)
    LAMP的安装和配置
    iPhone 开发过程中的一些小技术的总结(转)
    有效的利用资源边际成本与边际利益
    Dijkstra算法(注:单源最短路径的贪心算法)和数学归纳法<转>
  • 原文地址:https://www.cnblogs.com/waterdragon/p/2125527.html
Copyright © 2020-2023  润新知