Inside C++ Object Model: Object Member Efficiency

这一节内容比较少,主要是对比了多种数据存放形式的成员访问效率。数据的存放形式包含基本类型、数组、结构体、封装、继承和虚继承。

// 基本类型
float p_a_x, p_a_y, p_a_z;
float p_b_x, p_b_y, p_b_z;

// 数组
float[3] p_a, p_b;

// 聚合
struct Point{
    float x, y, z;
};

//封装
class Point
{
    float x, y, z;
public:
    float &GetX(){return x;}
    float &GetY(){return z;}
    float &GetZ(){return y;}
};

class Point
{
    float x, y, z;
public:
    float GetX(){return x;}
    float GetY(){return z;}
    float GetZ(){return y;}
};

// 继承
class Point1d{
public:
    float x;
};

class Point2d: public Point1d{
public:
    float y;
};

class Point3d: public Point2d{
public:
    float z;
};

// 虚继承
class Point1d{
public:
    float x;
};

class Point2d: virtual Point1d{
public:
    float y;
};

class Point3d: virtual Point2d{
public:
    float z;
};

对于上多种将z, y, z组织起来的形式,如果在开启代码优化的情况下,除了虚继承,访问x, y, z的效率是一样的。如果不采用代码优化,基本类型、数组、结构体、继承的效率是一致的(随编译器不同会有点差别),在类中,返回引用的效率比返回值的效率高一点点。采用虚继承的效率最低,且会随着虚继承层级的增加,数据访问的效率越低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值