gpt4 book ai didi

c++ - 继承类与将类实例的 ptr 作为成员变量包含在内对性能有何影响?

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:10 25 4
gpt4 key购买 nike

我在要求非常高的性能的“A”类中工作,并且正在尝试以任何一种方式计算出其含义。

如果我继承这个新类“B”,“A”的内存配置文件应该增加那么多。

如果我只包含指向“B”的指针作为“A”中的成员变量,那么我的想法是否正确,只要“B”在堆上(即新建)然后“A"将保持与新 ptr 引用不同的大小。还有什么我没有想到的吗?

对我来说,继承“B”在架构方面更可取,但在性能方面,坚持将其作为成员变量可能更可取。

最佳答案

我相信继承是这里最好的情况,但每种情况都不同,所以这里是每种选择的优缺点。

继承

  • 通常需要虚拟析构函数,这会在删除对象时产生轻微的开销,并增加一个“指针”的大小(这 1 个指针被所有虚拟对象使用,因此它使它更清晰)
  • 允许您重写一个函数,以便即使它被强制转换为“基”类,它也能正确地为您的对象工作。 (注意:这确实会在调用函数时调用一个小的开销)
  • 类的大小随着“基础”的大小而增加。
  • 任何非虚拟的“基本”函数都没有调用它们的开销。
  • 通常更简洁(只要继承有意义)

指向“基”类

  • 要求您在每次要调用其函数之一时取消引用指向“基”类的指针(即每个“基”函数都有开销)
  • 不可能在不使用函数指针的情况下正确覆盖函数(因此在“基”类上调用它们会调用基容器中的函数)(这可能比虚函数的开销更大)
  • 需要为两个分配单独分配,这通常具有相当严重的性能和内存影响(分配很慢,并且通常分配与某个边界对齐,增加它们的大小,以及存储额外的信息以便 block 可以被适本地释放)。
  • 允许您不分配基类,从而在该实例中节省内存
  • 允许您更改“基”类的内容,即使在您创建它之后也是如此。

真的,我认为作为优化,这可能是需要调查的最不重要的项目之一。与这种优化相比,通常对算法进行微小的更改(例如添加早期转义)会产生天文数字的差异。应该指导这个决定的是程序的结构,在这一点上,我认为我能给你的最好建议是:

大声说,类之间的关系,如果它的“类 A 类 B”,那么您应该继承。如果您说“A 类一个 B 类”,那么您应该在 A 类中保留指向 B 类的指针。

关于c++ - 继承类与将类实例的 ptr 作为成员变量包含在内对性能有何影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1169066/

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