为了更加直观的比较,好吧,我们选择以对象的初始化并add到list为例子。
首先,定义object如下:
测试代码:
java:
好吧,cpp换成char*指针:
再测试,平均大约为46ms。还是比java慢啊。
再看大量代码中会用到的char[],如下:
再测试,平均大约为62ms。还是比java慢啊,大部分情况下,处于可读性的考虑,应该使用第三种。
后面测试了vector、map之后,发现主要是cpp默认是value拷贝(简单地说可以认为java中的clone实现吧,当然细节相差还是很大的,尚且这么认为吧)的原因。使用指针后,内容复制消除了很多。
回到java,应该来说发展到jdk 6之后,虽然开发都用object,但是JVM内部将非primitive类型的所有对象都自动转换为指针操作了,而cpp因为要兼容早期的原因,不得不保留传统的机制。
注:上述测试是在msvc下测试的,换成gcc之后,string的速度可能会比char *要快,参考http://tieba.baidu.com/p/1038620654,大家可以进行测试。