為了更加直覺的比較,好吧,我們選擇以對象的初始化并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,大家可以進行測試。