C++对象在内存中有多大

本文介绍了C++中内存对齐的概念,重点讲解了虚函数的使用,包括虚函数表的实现、虚函数调用过程以及包含虚函数对象的内存影响。指出虚函数不会直接增加对象大小,因为虚函数地址存储在vptr中。
摘要由CSDN通过智能技术生成

内存对齐

C++中的内存对齐-CSDN博客

对象中的虚函数

虚函数表

对于包含虚函数的类,编译器会在对象的内存布局中添加一个指向虚函数表的指针,称为虚函数指针或 vptr。虚函数表是一个表格,其中包含了类的虚函数的地址。

虚函数调用过程

当调用一个对象的虚函数时,实际上是通过该对象的虚函数指针查找虚函数表,并从表中找到相应的函数地址进行调用。这就是为什么虚函数调用被称为动态绑定,因为它在运行时进行。

包含虚函数的对象大小

class student{
private:
    int age;
    char* name;
public:
    virtual void talk(){
        //...
    }
};

上面这个student类,包含一个int型的age变量,一个char类型的指针,还有一个指向虚函数表的指针。如果添加一个虚函数

class student{
private:
    int age;
    char* name;
public:
    virtual void talk(){
        //...
    }
    virtual void eat(){
        //...
    }
};

不会改变这个student类对象在内存中的大小,因为新增的虚函数是在虚函数表中添加的,而对象中保存的依旧只有一个指向虚函数表的指针。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值