以下对于局部变量、局部数组、C struct 和C++ 封装的函数进行测试,下列是两种编译器列出的各种结果:

3.5 对象成员的效率(Object Member Efficiency)

上述所显示的重点在于,如果把优化打开,“封装”就不会带来执行期的效率成本。使用inline存取函数亦然。

在下一个测试中,使用单一继承、虚拟继承(单层)和虚拟继承(双层)的测试结果:

class Point1d{...}; //维护x
class Point2d: public Point1d{...};  //维护y
class Point3d: public Point2d{...};	 //维护z

“单层虚拟继承”是从Point1d中虚拟派生出Point2d;“双层虚拟继承”则又从Point2d虚拟派生出Point3d。

 3.5 对象成员的效率(Object Member Efficiency)

单一继承不会影响测试效率,因为member被连续存储在derived class object中,并且其offset在编译器就已经知道了。

虚拟继承下,两个编译器都没能够辨识出对”继承“而来的data member pt1d::_x的存取是通过一个非多态对象(因而不需要执行期的间接存取)进行的。两个编译器都会对pt1d::_x(及双层虚拟继承中的pt2d::_y)产生间接存取操作,虽然其在Point3d对象中的位置早在编译器就固定了。“间接性”压抑了“把所有运算都移往寄存器”的优化能力。但是间接性并不会影响非优化程序的执行效率。

相关文章:

  • 2021-09-05
  • 2021-07-10
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-04-17
  • 2022-01-18
  • 2021-09-12
猜你喜欢
  • 2021-10-30
  • 2022-12-23
  • 2021-10-15
  • 2022-12-23
  • 2021-07-30
  • 2022-12-23
相关资源
相似解决方案