我想這要慢得多是不是祕密的std :: string比C字符串慢得多(在大多數的各個方面:配置,比較,搜索):C++爲什麼的std :: string比C字符串
// alloc
malloc/memcpy : 1.972 secs
std::string : 2.259 secs
// compare
strcmp : 1.319 secs
std::string.compare : 15.802 secs
// search
strstr : 5.045 secs
memmem : 1.345 secs
std::string.find : 7.774 secs
所以我在這裏的問題不是如何解決它,但爲什麼std :: string是緩慢的(什麼STL做錯了或我錯了)?這種緩慢使得std :: string幾乎沒用。因此,在關聯容器中使用std :: string作爲關鍵字會使事情變得更糟(因爲插入/搜索時需要進行比較)。
只是要注意唯一的例外是std :: string被複製得非常快 - 因爲它被ref-counting(認爲GCC 5認爲刪除了它)。
附上我的基準代碼: https://drive.google.com/file/d/0B_jw6pBAvP6bSEtmLTA4RU5zZ00/view?usp=sharing
的代碼生成使用:
g++ -O2 -g perf_cstr_vs_std.cpp -o perf_cstr_vs_std
編譯/運行環境:
RedHat6 VM + gcc 4.4.7
如果您認爲沒用,請不要使用它 –
如果您沒有顯示測試代碼,您會得到最終的投票結果。最有可能的情況是你的測試用例沒有測試相同的東西。 –
你不清楚你在比較什麼。 std :: string是慢的,如果你用它做的東西,你不會用「c-string」(不管是什麼)。但請注意,涉及到字符串的許多操作(例如獲取子字符串)涉及創建新的字符串對象分配自己的內存並保存數據副本。新的['std :: string_view'](http://en.cppreference.com/w/cpp/string/basic_string_view)修復了其中一些問題。 – juanchopanza