在使用 -O3 编译的 C++ 中,没有虚拟性的继承是否会在以下方面产生成本:
- 执行时间处理时间
- 记忆
如果答案是肯定的:为什么?
例如:MyClass1 和 MyClass2 在性能和内存方面是否相同?
在使用 -O3 编译的 C++ 中,没有虚拟性的继承是否会在以下方面产生成本:
如果答案是肯定的:为什么?
例如:MyClass1 和 MyClass2 在性能和内存方面是否相同?
执行时间处理时间
什么的?函数是静态解析的,所以函数调用是一样的。MyClass1
的构造函数会调用基类的构造函数,其析构函数会调用基类的析构函数,所以构造和销毁可能会有一些开销。也许。一些编译器可能会优化调用。
记忆
这将是相同的,两者都只有一个 member double
。理论上。取决于我猜的实现,因为它不是标准规定的,但最常见的是不会有内存开销。
请注意MyClass1
,通过指针删除对象会Derived
导致未定义的行为,因为没有virtual
析构函数。
注意 2没有多态性的继承是代码异味。并不是说这是错误的,但在大多数情况下,构图更好。
在内存空间方面,我猜你的 MyClass1 消耗更多,因为它需要跟踪所有类结构和关系。对于性能,我没有看到任何显着差异。