C++类占用内存大小知识总结

(3)一个类至少占用一个字节大小;

(4)虚函数:不管几个虚函数,sizeof()都是多了4个字节;

(5)类里只要有一个虚函数(或者说至少有一个虚函数),这个类会产生一个指向虚函数的指针

  有两个虚函数,那么这个类就会产生两个指向虚函数的的指针。

      虚函数表是基于类的,跟着类走,因为有了虚函数的存在,导致系统在类中添加了一个指针;

      这个指针正好指向虚函数表,这个指针叫做vptr; 这个vptr的值由系统在适当的时机(比如构造函数中通过增加额外的代码来给值)

总结:

a:对于类中静态数据成员不计算在sizeof内;

b:普通的成员函数和静态成员函数不计算在类的对象的sizeof内

c:虚函数不计算在内的sizeof()内,但是虚函数会让类对象增加4字节的大小,以容纳虚函数表指针;

d;虚函数表[vtbl]是基于类的(跟着类走,跟对象没关系,不是基于对象的);

e:如果有多个数据成员,那么为了提高访问速度,某些编译器可能将数据成员之间的内存占用比例进行调整;(内存数据对齐)

f:不管什么类型指针 char *p ,int *q;该指针占用的内存大小是固定的;如sizeof(char *)=4,sizeof(int *)=4;在其他平台可能是8字节(linux平台)。

复制代码
class MyClass
{
public:
    MyClass();
    ~MyClass();

    float getValue()const {
        return m_value;
    };
    static void setcount(int c)
    {
        m_count = c;
    };
    virtual void func() {};
protected:
    int ab;
    float m_value;
    static int m_count;


private:
    
};

MyClass::MyClass()
{
}

MyClass::~MyClass()
{
}
using namespace std;
//类对象所占用的空间大小
int main()
{
   // std::cout << "Hello World!\n";
    MyClass obja;
    int size = sizeof(obja );
    cout << size << endl;
    return 1;
}
复制代码

结果:12

posted @   伊红美兰  阅读(430)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示