对于很多人来说,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 的编程。