首页 > 试题广场 >

哪些因素可能会影响到一个类的大小(多选)

[不定项选择题]

 哪些因素可能会影响到一个类的大小(多选)

  • 成员个数
  • 函数个数
  • 是否有虚函数
  • 虚函数个数
  • 静态变量个数
  • 对齐方式
成员变量
成员函数不占用内存
static静态成员变量存储在静态存储区,共享量,无需分配空间
存在虚函数,虚函数需要构建虚函数表,在该类中存在一个指向虚函数表的指针
对齐方式也影响
发表于 2021-04-27 13:48:37 回复(0)

只要有虚函数就会有vfptr

静态变量要单独分配内存,不占对象空间

编辑于 2020-12-30 09:49:13 回复(0)

A. 成员个数:类中的成员变量的数量越多,占用的内存空间就越大。

B. 函数个数:类中的成员函数(包括构造函数和析构函数)的数量不会直接影响类的大小。成员函数通常只是指向代码逻辑的指针,并不会直接存储在类的实例中。

C. 是否有虚函数:如果类中存在虚函数,编译器会为每一个类实例分配一个额外的指针(通常称为虚函数表指针),用于实现运行时的动态多态性。这会增加类的大小。

D. 虚函数个数:虚函数本身的数量不会直接影响类的大小。不同类的虚函数表的大小可能会有所不同,但是一个类中的每个实例使用的虚函数表大小都是相同的。

E. 静态变量个数:静态变量在类的实例之间是共享的,它们不会对类的实例大小产生影响。

F. 对齐方式:编译器会对类的成员进行内存对齐,以便提高访问效率。对齐方式的选择可能会导致类的大小增加,因为需要插入一些填充字节来保持对齐。

因此,影响一个类的大小的因素包括成员个数、是否有虚函数和对齐方式。而函数个数不会直接影响类的大小。

发表于 2023-10-31 11:47:04 回复(0)
对齐方式??
发表于 2021-11-21 22:19:42 回复(0)
一个类的大小(class size)在C++中由多个因素影响,包括以下几个方面:

1. 类的成员变量(member variables):类的大小受其成员变量的类型、数量和对齐方式的影响。每个成员变量占据一定的内存空间,而且在内存中可能需要对齐。例如,一个int类型的成员变量通常占用4个字节的内存空间。

2. 类的虚函数(virtual functions):如果一个类有虚函数,那么它会有一个指向虚函数表(vtable)的指针,这个指针会占用额外的内存空间。虚函数表本身也会占用一些内存空间,其中存储了虚函数的地址。

3. 类的继承关系(inheritance):如果一个类继承自其他类,那么它会包含父类的成员变量和虚函数表指针。继承关系还可能引入额外的内存对齐要求,因为子类的对象通常也要满足父类的对齐要求。

4. 类的访问修饰符(access modifiers):类的大小受到访问修饰符的影响。私有成员变量只能在类内部访问,因此它们不会影响类的大小。而公有成员变量可以被外部代码访问,因此它们会增加类的大小。

5. 类的静态成员变量(static member variables):静态成员变量在类的所有对象之间共享,它们不会占用对象的内存空间。但是它们会增加类的大小,因为它们需要在类的作用域内存储。

需要注意的是,编译器可能会对类的大小进行优化,例如通过内存对齐和字节对齐来减少内存空间的浪费。同时,不同的编译器和编译选项可能会导致类的大小有所差异。
发表于 2023-09-30 19:53:10 回复(0)
什么叫类的大小
发表于 2019-04-10 14:19:16 回复(1)
虚函数有虚表,和虚指针。都占空间
编辑于 2021-02-08 07:54:37 回复(0)
既然一个类如果有虚函数,那么它会保存一个4字节的指向虚函数表的指针,那么虚函数个数不会影响类的大小嘛?
发表于 2023-10-01 17:27:37 回复(1)
与类大小有关的因素:普通成员变量,虚函数,继承(单一继承,多重继承,重复继承,虚拟继承)
与类大小无关的因素:静态成员变量,静态成员函数及普通成员函数
发表于 2023-08-23 09:29:34 回复(0)
1) 类的非静态成员变量大小,静态成员不占据类的空间,成员函数也不占据类的空间大小;
2) 内存对齐另外分配的空间大小,类内的数据也是需要进行内存对齐操作的;
3) 虚函数的话,会在类对象插入vptr指针,加上指针大小;
发表于 2022-10-17 18:03:58 回复(0)
虚表不占位置吗
发表于 2022-10-06 10:40:22 回复(0)
对齐方式指的是内存对齐方式
发表于 2022-06-10 17:54:54 回复(0)
类的大小和类的对象大小不是一个概念吧
发表于 2022-05-10 23:38:31 回复(0)