gpt4 book ai didi

c++ - 扩展类时的性能,组合与多态性

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:28:08 24 4
gpt4 key购买 nike

在扩展一个类时,多态和组合在性能上有什么区别吗?以下面的示例使用组合(在 C++ 中):

class Window
{
public:
Window(Renderer &renderer) : m_renderer(renderer)
{ }

void update()
{
....
m_renderer.draw(this);
}
private:
Renderer &m_renderer;
}

...并使用多态性:

class Window : public Renderer
{
public:
virtual ~Window() {};

void update()
{
...
draw();
}
protected:
virtual void draw() = 0;
}

组合版本使用引用作为成员,所以我想它需要更多空间,但是这两个版本是否有任何性能提升?

注意:我已经查看了类似的帖子,例如 this ,但不包括性能。

感谢您的回答!

最佳答案

好吧,如果您这样提出问题,那么存在内存/速度权衡。

1。组成

  • 8 个字节(在 64 位架构上)可能被用于引用

2。继承

  • 8 字节(在 64 位架构上)如果你需要让你的类多态(v 指针)
  • 基类属性的一些开销(如果有的话)(注意:从有状态类继承是一种代码味道)
  • ~20% 的虚拟通话开销(粗略估计,其中有很多变化)

所以您可能会说继承的成本稍微高一些……但实际上它只是不可见的。与图形渲染所需的内部计算相比,函数调用的开销可以忽略不计。


另一方面,语义不同。继承与否很重要。你是 Window 一个 Renderer 吗?有道理吗?

首先编写理智代码。然后根据需要进行优化(如果 !!!)。

关于c++ - 扩展类时的性能,组合与多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9618092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com