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 @ 2022-04-07 15:11  伊红美兰  阅读(384)  评论(0编辑  收藏  举报