c++类的大小

本文通过实例展示了在X64环境下不同C++类的大小,包括基本类型、指针、空类、带虚函数的类以及内存对齐情况。
摘要由CSDN通过智能技术生成

#ifndef _STUDY_CLASS_SIZE_H_
#define _STUDY_CLASS_SIZE_H_

#include<iostream>
#include<string>

class CEmpty
{

};

class CEmpty1
{
public:
    void Show()
    {
        std::cout << "CEmpty2::Show" << std::endl;
    }
};

class CEmpty2
{
public:
    virtual ~CEmpty2() {}
    virtual void Show() = 0;
};

class CEmpty3
{
public:
    virtual void Show()
    {
        std::cout << "CEmpty3::Show" << std::endl;
    }
};

class COne
{
private:
    char   m_char;
};

class COne2
{
private:
    char*   m_pchar;
};

class CTwo
{
private:
    char   m_char;
    uint64_t m_ui;
};

class CThirth
{
private:
    uint64_t m_ui;
    char   m_char;
};

class CFour
{
private:
    char   m_char;
    uint64_t m_ui;
    std::string m_strName;
};

class CFour2
{
private:
    char   m_char;
    char* m_pchar;
    uint64_t m_ui;
    std::string m_strName;

};

class CFive
{
    void Show()
    {
        std::cout << "CFive::Show" << std::endl;
    }
private:
    uint64_t m_ui;
    char   m_char;
    std::string m_strName;
};

class CSix
{
    virtual void Show()
    {
        std::cout << "CSix::Show" << std::endl;
    }
private:
    uint64_t m_ui;
    char   m_char;
    std::string m_strName;
};

class CSeven :public CSix
{
    void Print()
    {
        std::cout << "CSeven::Show" << std::endl;
    }
private:
    uint32_t m_uitext;
};

class CEight :public CSix
{
    virtual void Print()
    {
        std::cout << "CSeven::Show" << std::endl;
    }
private:
    uint32_t m_uitext;
};


void testSize()
{
     CEmpty* p1 = new CEmpty();
    std::cout << sizeof(p1) << std::endl;
    std::cout << sizeof(CEmpty) << std::endl;
    std::cout << sizeof(CEmpty1) << std::endl;
    std::cout << sizeof(CEmpty2) << std::endl;
    std::cout << sizeof(CEmpty3) << std::endl;
    std::cout << sizeof(COne) << std::endl;
    std::cout << sizeof(COne2) << std::endl;
    std::cout << sizeof(CTwo) << std::endl;
    std::cout << sizeof(CThirth) << std::endl;
    std::cout << sizeof(CFour) << std::endl;
    std::cout << sizeof(CFour2) << std::endl;
    std::cout << sizeof(CFive) << std::endl;
    std::cout << sizeof(CSix) << std::endl;
    std::cout << sizeof(CSeven) << std::endl;
    std::cout << sizeof(CEight) << std::endl;
    
}

#endif // _STUDY_CLASS_SIZE_H_

在 X64 环境下结果:
8
1
1
8
8
1
8
16
16
56
64
56
64
72
72

结论:在X64环境下

1)指针8个字节

2)空类1个字节

3)成员函数不占字节

4)成员函数有虚函数8个字节(一个类总共8个字节)

5)内存对齐
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值