首页 > 试题广场 >

在32位编译器下sizof(P)为()

[单选题]
class P
{
private:
	int ival;
public:
	P();
	~P();
	int GetVal(){
		return ival;
	};
	virtual int SetVal(int val)
	{
		ival=val;
	};
};
在32位编译器下sizof(P)为()
  • 4
  • 8
  • 12
  • 16
推荐

1.类的大小为类的非静态成员数据的类型大小之和,也就是说静态成员数据不作考虑。

2.普通成员函数与sizeof无关。

3.虚函数由于要维护在虚函数表,所以要占据一个指针大小,也就是4字节。

4.类的总大小也遵守类似class字节对齐的,调整规则。

 本题中,int ival占4个字节,同时virtualintSetVal(intval)占用4个字节,一共是占用8个字节,选B

编辑于 2015-12-14 10:54:59 回复(2)
看不懂解释
发表于 2018-03-19 22:36:51 回复(0)
含有虚函数的类都会建立一张虚函数表,表中存放的是虚函数的函数指针,这个表的地址存放在类中,所以不管有几个虚函数,sizeof(P)的大小都是4+4=8。
发表于 2015-12-13 21:05:08 回复(0)
sizeof(p) = 4 + 4 = 8  包含成员变量和一个虚指针 
发表于 2015-12-17 13:44:10 回复(0)
这里是32位系统,虚函数指针为32/8 = 4 Byte,class里存在内存补其,因此这里32bit系统下是4+4=8Byte
如果是64bit系统,这个class P就是8+4(补其为8)=16 Byte,如果是两个int作为member也是16Byte,如果还加一个int(3个int作为member),sizeof(p) = 24 Byte
发表于 2016-08-14 18:53:31 回复(1)
和类的大小有关的因素:普通成员变量,虚函数,继承
和类的大小无关的因素:静态成员变量,静态成员函数,普通成员函数
类P的内存模型如下:虚函数表指针,该指针一定位于类内存模型最前端,接下来是成员变量。
虚函数指针(4个字节)
成员变量(int 4个字节)


发表于 2020-09-10 21:13:32 回复(0)
普通成员函数与sizeof无关。
发表于 2017-03-05 21:01:31 回复(0)
虚函数的实现要求对象携带额外的信息,这些信息用于在运行时确定该对象应该调用哪一个虚函数。典型情况下,这一信息具有一种被称为 vptr(virtual table pointer,虚函数表指针)的指针的形式。vptr 指向一个被称为 vtbl(virtual table,虚函数表)的函数指针数组,每一个包含虚函数的类都关联到 vtbl。当一个对象调用了虚函数,实际的被调用函数通过下面的步骤确定:找到对象的 vptr 指向的 vtbl,然后在 vtbl 中寻找合适的函数指针。
所以类p除了函数成员占用4个字节,虚函数表指针占4个字节
所以8,答案B
发表于 2016-03-25 17:06:50 回复(0)
手机版眼花缭乱,最后的那个virtual关键字没看到
发表于 2016-10-27 08:38:26 回复(1)
虚函数会创建一个虚函数表,表中有指向虚函数的指针,sizeof=4
编辑于 2024-02-29 14:41:44 回复(0)
Chatgpt C++对象的大小(使用sizeof操作符来获取)通常取决于以下几个因素: 数据成员的大小: 对象的大小受其数据成员的大小影响。每个数据成员都占据一定的内存空间,其大小取决于其数据类型。例如,一个整数(int)通常占据4个字节的内存空间,而一个双精度浮点数(double)通常占据8个字节。 对齐要求: C++编译器通常会要求数据成员按照某种对齐方式来排列,以提高内存访问的效率。这意味着某些填充字节可能会被添加到对象中,以确保数据成员按照正确的对齐方式排列。对齐要求通常受编译器和平台的影响。 虚函数表指针(virtual function table pointer): 如果类中包含虚函数,编译器通常会在对象中添加一个指向虚函数表的指针(通常称为vptr)。这个指针的大小通常是一个机器字的大小(32位系统上是4字节,64位系统上是8字节)。 继承关系: 如果一个类派生自另一个类,那么它的大小还会受到基类的影响。派生类的对象包含基类的成员,因此基类的大小也会被考虑在内。 需要注意的是,对象的大小可能会因编译器和平台而异。你可以使用sizeof操作符来查看特定对象的大小,以便获得准确的信息。例如,sizeof(MyClass)将返回MyClass类的对象大小。
发表于 2023-10-10 14:39:23 回复(0)
虚函数有虚函数表
发表于 2021-05-19 14:50:50 回复(0)
虚函数也要占用一个指针大小的空间
发表于 2021-03-09 08:38:19 回复(0)
虚函数存在续表,指针的大小在32为系统下位4个字节,在64为系统下为8个字节
然后int类型的成员变量,在32位系统下为4个字节,在64为系统下为8个字节。
4+4 = 8
发表于 2020-07-01 22:20:10 回复(0)
int ival占4字节,virtual int SetVal(int val)占4字节,所以共8字节
发表于 2019-03-01 11:34:20 回复(0)
为什么val不占空间呢。。
发表于 2018-07-16 17:16:52 回复(0)
#include<stdio.h> #include<string.h> class p{ private: int ival; public: p(); ~p(); int GetVal() { return ival; }; virtual int Setval(int val){ ival=val; } }; int main() { printf("%d",sizeof(p)); getchar();getchar(); return 0; }; 为什么在dev-c中显示16啊?不是先出现int的类型是4吗,然后补齐到8???
编辑于 2017-08-10 18:29:27 回复(0)
类的成员函数放在代码区;virtual 产生this指针;
发表于 2016-09-21 10:01:25 回复(0)