C++ 和 C 的效率比较

对于很多人来说,C++ 似乎比 C 易用,很多捧 C++ 的也说,C++ 具有 C 的效率。不过,说来说去,还是需要分析一下才行。
比如,对于一个3维坐标的点来说,建一个 C++ 的类,大概会是:

class point_cpp{
protected:
    int x_, y_, z_;

    point_cpp(int x, int y, int z) : x_(x), y_(y), z_(z)  {  }
    ......
};

对 C 来说,即是:

struct point_c {  int x, y, z;  };

单点空间需求比较

C++除了要保存 3 维坐标,还需要保存 this 指针,创建函数,以及成员函数的表。
比 C 多了1倍不止。

初始化单点

就从 C++ 函数来说,要完成创建函数,需要压栈 3 个参数,然后 call,赋值,返回。
C 很简单,赋值即可。
此项比较,C++ 实在是太慢了!除非优化编译能让创建函数消失。

数组比较

在考察 point 数组。C++ 用 STL 原生数组,不加改动的话,加 10000 个点,那么要执行 10000 个创建函数,多出 10000 个 this 和 函数、函数表的空间。
另外,这个数组的空间扩展,按 STL 的倍数扩展规则,一个个添加的话,需要扩展 14 次扩展到 16000,多了60%的空间,多了 n 多次的 delete[] new 的创建函数调用工作。
由于重新创建时,老数据不能 delete ,所以空间占用最多时是:8000 + 16000 = 24000。

如果不仔细,每次扩展都只扩展 1 个的话,那就造成重复执行创建的灾难!

C 的编写人员,一般用 realloc 和 memcpy 工作,扩展时并没多出很多空间、效率的消耗。

结论:

编写 C++ 的高效程序,不能用纯 C++,并且需要仔细学习 C 的编程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值