• sizeof计算栈中分配的大小


    #include<iostream>

    using namespace std;

    class A1

    {

    public:

    int a;

    static int b;

    A1();

    ~A1();

    };

    class A2{

    public :

    int a;

    char c;

    A2();

    ~A2();

    };

    class A3{

    public:

    float a;

    char c;

    A3();

    ~A3();

    };

    class A4

    {

    public:

    float a;

    int b;

    char c;

    A4();

    ~A4();

    };

    class A5{

    public:

    double d;

    float a;

    int b;

    char c;

    A5();

    ~A5();

    };

    int main()

    {

    cout<<sizeof(A1)<<endl;

    cout<<sizeof(A2)<<endl;

    cout<<sizeof(A3)<<endl;

    cout<<sizeof(A4)<<endl;

    cout<<sizeof(A5)<<endl;

    return 0;

    }

    答案:4,8,8,12,24

    静态变量是存放在全局数据区的,而sizeof计算栈中分配的大小,是不会计算在内的。

    字节对齐是编译时决定的,一旦决定则不会再改变,因为即使有对齐的因素在,也不会出现一个结构在运行时尺寸发生变化的情况。

    在本题中,A1的数据对齐是下面的情况:

    |-------int--------|     4B

    A2的数据对齐是下面的情况:

    |--------int--------|   4B

    |char|----|----|----|   1B+3B

    A3的数据对齐是下面的情况:

    |--------float-------|    4B

    |char|----|----|----|     1B+3B

    A4的数据对齐是下面的情况:

    |-------float-------|       4B

    |-------int---------|       4B

    |char|----|----|----|      1B+3B

    A5的数据对齐是下面的情况:

    |---------------double----------------|     8B

    |-------float-------|--------int--------|    4B+4B

    |char|----|----|----|----|----|----|----|    1B+7B

  • 相关阅读:
    浏览器的reflow和repaint
    javascript正则表达式中参数g的作用
    InkCanvas 自由虚线笔画
    WPF 圆轮菜单的实现
    WPF实现化学式上下标
    install and use zookeeper C client API
    install and use boost::thread
    explicit instantiations in template class/function
    The science of programming
    how does vector work?
  • 原文地址:https://www.cnblogs.com/yanglf/p/2752641.html
Copyright © 2020-2023  润新知