Re: Как работает с памятью std::map ?
От: Vamp Россия  
Дата: 17.05.12 21:24
Оценка: 2 (1)
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. При создании копии твоей длинной строки реально строки не копируются, а вместо этого используется общий указатель.
Да здравствует мыло душистое и веревка пушистая.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.