首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有虚函数的C++继承的开销

没有虚函数的C++继承的开销
EN

Stack Overflow用户
提问于 2009-08-14 18:03:09
回答 5查看 10.9K关注 0票数 22

在C++中,与继承没有虚函数的基类相关的开销(内存/cpu)是多少?它和类成员的直接copy+paste一样好吗?

代码语言:javascript
复制
class a
{
public:
    void get();
protected:
    int _px;
}

class b : public a
{

}

代码语言:javascript
复制
class a
{
public:
    void get();
protected:
    int _px;
}

class b
{
public:
    void get();
protected:
    int _px;

}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-08-14 21:29:11

与copy和past相比,使用继承时可能会有轻微的内存开销(由于填充),请考虑以下类定义:

代码语言:javascript
复制
struct A
{
  int i;
  char c1;
};

struct B1 : A
{
  char c2;
};


struct B2
{
  int i;
  char c1;
  char c2;
};

sizeof( B1 )可能是12,而sizeof(B2)可能只是8。这是因为基类A被单独填充到8字节,然后B1被再次填充到12字节。

票数 31
EN

Stack Overflow用户

发布于 2009-08-14 18:06:13

它的编译时间会稍长一些,而且不会有额外的运行时开销。从优化器的角度来看,非虚方法与过程是相同的--它们可以仅使用它们的内存地址来调用,而不需要从虚方法表中获得开销。

票数 16
EN

Stack Overflow用户

发布于 2009-08-14 19:06:36

如果您忘记了虚拟继承,那么在内存和性能方面,拥有一个基类就等同于拥有一个相同类的成员。除了有时它可能更好(例如,一个空类的大小至少为1,但拥有一个空的基类通常没有开销)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1279290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档