在分析 C++ 应用程序时,我注意到以下代码:
std::string s;
int i;
dict[s[i]] ++;
产生 (inline) 的调用std::string::_M_leak_hard
,链接到std::string::_M_mutate
和更多(gcc-4.7.3),并通过疯狂数量的 CPU 指令比较字符串的内部状态,在应该是 const 上下文并优化为一个简单的内存读取。
我做错了什么吗?这条 std::string 实现特定细节链很容易消耗 50% 的 CPU 时间。