C++面试常见问题(五)

本文介绍了C++面试中常见的两个问题:静态链接与动态链接的区别,以及C++中类对象的内存布局。静态链接使用静态库,而动态链接则使用动态库。类对象的内存布局包括非静态成员、虚函数表、虚基表等,编译器会根据需要插入vfPtr和vbPtr指针,并可能进行字节补齐。
摘要由CSDN通过智能技术生成

1、静态链接和动态链接的区别

静态链接:
使用静态库进行链接。静态库(.a 、.lib)。
动态链接:
使用动态库进行链接。动态库(.so 、.dll )。

具体的区别下面这篇博客讲得比较详细。
大家可以移步至:C++静态库与动态库

2、C++中类对象的内存布局

  • 空类、单一继承的空类、多重继承的空类所占空间大小为:1(字节,下同);

  • 一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间的;

因此一个对象的大小 >= 所有非静态成员大小的总和

  • 当类中声明了虚函数(不管是1个还是多个),那么在实例化对象时,编译器会自动在对象里安插一个指针vPtr指向虚函数表VTable;

  • 虚承继的情况:由于涉及到虚函数表和虚基表,会同时增加一个(多重虚继承下对应多个)vfPtr指针指向虚函数表vfTable和一个vbPtr指针指向虚基表vbTable,这两者所占的空间大小为:8(或8乘以多继承时父类的个数);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值