jam*_*o00 19 c++ virtual inheritance overhead
在C++中,与继承没有虚函数的基类相关的开销(内存/ CPU)是什么?它是否像集体成员的直接复制+粘贴一样好?
class a
{
public:
void get();
protected:
int _px;
}
class b : public a
{
}
Run Code Online (Sandbox Code Playgroud)
和....相比
class a
{
public:
void get();
protected:
int _px;
}
class b
{
public:
void get();
protected:
int _px;
}
Run Code Online (Sandbox Code Playgroud)
cme*_*erw 27
与复制和过去相比,使用继承时可能会有轻微的内存开销(由于填充),请考虑以下类定义:
struct A
{
int i;
char c1;
};
struct B1 : A
{
char c2;
};
struct B2
{
int i;
char c1;
char c2;
};
Run Code Online (Sandbox Code Playgroud)
sizeof(B1)可能是12,而sizeof(B2)可能只是8.这是因为基类A分别填充到8个字节,然后B1再次填充到12个字节.
Joh*_*kin 15
编译需要花费更长的时间,并且不会有额外的运行时开销.从优化器的角度来看,非虚方法与过程相同 - 只需使用其内存地址即可调用它们,而无需虚拟方法表的开销.