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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!