LOK>Написал пограммку:
int main(){
std::string str("12356789012356789012345678901234567890");
std::map<std::string, int> m;
m.insert(std::pair<std::string, int> (str, 1));
}
LOK>==12610== total heap usage: 2 allocs, 2 frees, 111 bytes allocated
LOK>Подумал, а что если поменять std::map<std::string, int> на std::map<std::string*, int, Comp>, ведь поидее должен быть профит по памяти на длиннных строках.
int main(){
std::string str("12356789012356789012345678901234567890");
std::map<std::string*, int, Comp> m;
m.insert(std::pair<std::string*, int> (&str, 1));
}
LOK>==12633== total heap usage: 2 allocs, 2 frees, 111 bytes allocated
LOK>Вот и возник вопрос, а почему?
Cкорее всего из-за оптимизации в std::string. При создании копии твоей длинной строки реально строки не копируются, а вместо этого используется общий указатель.