首页 > 试题广场 >

以下关于类占用内存空间的说法正确的是

[不定项选择题]
以下关于类占用内存空间的说法正确的是
  • 类所占内存的大小是由成员变量(静态变量除外)和虚拟函数表指针空间(若有虚函数)所决定
  • 空类的内存大小是1个字节
  • 类中无论有多少个虚函数,只会多占一个虚表指针空间
  • 子类的内存大小等于父类的内存大小加上子类独有成员变量的内存大小

空类会占用1字节的内存空间,原因是C++要求每个实例在内存中都有独一无二的地址。

(一)类内部的成员变量:

普通的变量:要占用内存的,要注意对齐原则(这点和struct类型很相似)。

static修饰的静态变量:不占用内存,原因是编译器将其放在全局变量区。

(二)类内部的成员函数:

普通函数:不占用内存。

虚函数:占用4个字节,用来指定虚函数表的入口地址。所以一个类的虚函数所占用的地址是不变的,和虚函数的个数没有关系。

发表于 2019-09-12 14:37:31 回复(0)
空的类是会占用内存空间的,而且大小是1,原因是C++要求每个实例在内存中都有独一无二的地址。 类内部的成员变量: 普通的变量:是要占用内存的,但是要注意对齐原则(这点和struct类型很相似)。 static修饰的静态变量:不占用内容,原因是编译器将其放在全局变量区。 类内部的成员函数: 普通函数:不占用内存。 虚函数:要占用4个字节,用来指定虚函数的虚拟函数表的入口地址。所以一个类的虚函数所占用的地址是不变的,和虚函数的个数是没有关系的 注意:系统为了提高实例在内存中的存取效率,类的大小会被调整到系统整数倍,如5会被调整到8
发表于 2018-08-30 19:04:43 回复(0)
c选项,多继承会出现多个虚函数指针
发表于 2021-04-30 13:31:32 回复(0)
A不对吧,有无虚函数也是个吧?
发表于 2021-02-02 22:47:41 回复(1)
类所占内存的大小是由成员变量(静态变量除外)决定的,成员函数是不计算在内的。摘抄部分:
    成员函数还是以一般的函数一样的存在。a.fun()是通过fun(a.this)来调用的。所谓成员函数只是在名义上是类里的。其实成员函数的大小不在类的对象里面,同一个类的多个对象共享函数代码。而我们访问成员函数是通过类里面的一个指针实现,而这个指针指向的是一个table,table里面记录的各个成员函数的地址(当然不同的编译可能略有不同的实现)。所以我们访问成员函数是间接获得地址的。所以这样也就增加了一定的时间开销,这也就是为什么我们提倡把一些简短的,调用频率高的函数声明为inline形式(内联函数)

发表于 2018-10-27 00:00:46 回复(0)
A和D都没有考虑是否存在vptr的情况啊,这样能行?
发表于 2021-07-06 11:54:05 回复(0)
A不考虑虚函数吗?
发表于 2020-10-24 13:37:47 回复(1)
D也能选?父类没有虚函数,子类定义虚函数呢?
发表于 2022-06-16 08:51:51 回复(0)
D是啥没考虑到基类没有虚函数,子类有虚函数的情况呢
编辑于 2024-04-21 19:41:43 回复(0)
我觉得A、D都不对,不管怎么样,内存大小还得考虑字节对齐的情况吧。
发表于 2022-10-16 16:30:51 回复(0)
D不严谨吧。如果base类没有虚函数,但是派生类有虚函数,那样D不就错了吗?
发表于 2022-05-09 15:55:44 回复(0)
D不对、虚继承 虚基指针呢?
发表于 2022-02-28 13:49:04 回复(0)
虚基类指针呢?虚基类指针和虚函数指针都会占用空间的吧
发表于 2022-02-12 22:32:37 回复(0)
这道题答案是B、C、D。
A选项错误,因为有无虚函数也决定所占内存大小。A选项建议改为
类所占内存的大小是由成员(静态变量除外)决定的,因为类成员就可以包含成员变量和成员函数。
发表于 2021-11-10 19:34:49 回复(0)
钻石继承下子类也是 父类大小+子类独有成员变量嘛??????
发表于 2021-03-11 21:30:19 回复(0)
A不对
发表于 2021-02-03 21:26:52 回复(0)
表述不太严谨
发表于 2020-10-18 08:42:58 回复(0)
a不对吧,没有提成员函数
发表于 2020-08-06 12:53:18 回复(0)
有无虚函数不是也改变类大小吗
发表于 2019-03-14 13:28:06 回复(1)