类对象存储模型——类的内存对齐&&空类的大小(面试题)

类实例化对象

  • 类只是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没有分配实际空间来存储它。
  • 一个类可以实例化出多个对象,实例化出的对象有实际的物理空间。
  • 做个比方:类实例化出对象,好比拿着设计图来设计房子。类就是设计图,并没有实体建筑,而对象才是设计出来的成品,占用物理空间。

类对象存储模型

这里写图片描述

  • 一个类可以实例化多个对象
  • 每个对象的大小为类中所有成员变量大小之和。(成员函数没有在类内,而在公共代码区)
  • 计算类得到大小遵循内存对齐原则

类和对象——面试题

1. 为什么要内存对齐?(缺点:浪费空间)
答:操作系统读取内存时,按照4(或4的整数倍)个字节读取内存,保证内存对齐可节省时间
这里写图片描述
2. 空类对象的大小是多少?
答:1

class A
{
};

int main()
{
    cout << sizeof(A) << endl;
    system("pause");
    return 0;

}

这里写图片描述

3. 为什么空类的大小为1?
答:
1)空类也要给空间,标识在空间中的确存在过。当我们声明一个函数时,它必须在内存中占有一定的空间,否则无法得到这些事例。

2)操作系统对内存的读取是按照字节,因此即使是空类,也至少有一个字节,否则无法使用这些类。

3)举个例子:如果空类的大小为0,如果有两个空类A B,那么类创建的对象 a,b在内存上是重叠的(取地址 A B得到的就是相同的)——不符合语法或者操作系统规定


4. 为什么空类的大小不是4?
:浪费。**一个字节没有别的意思,只是代表这个类在内存中存在过。


5. 如果在该类型中添加一个构造函数和析构函数,并对该类型求sizeof,得到的结果是多少?
答:还是1。

调用构造函数或者析构函数只需要知道函数的地址即可,函数的地址只和类型有关,与类型的实例无关。


6.如果把析构函数标记为虚函数呢?
答:
C++编译器一旦发现类型中虚函数的存在,就会为该类型生成一个虚表(存放虚函数指针),并且每实例出一个对象,就会产生一个虚表。

 在32位机器上,一个字节对应八个比特位,sizeof的结果是:4
 在64位机器上,一给字节对应八个比特位,sizeof的结果是:8
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值