доступ к элементам карты увеличивает выделенный объем памяти - PullRequest
1 голос
/ 12 октября 2011

В моем коде есть элемент map<vector<double>,double> с именем EU.

Я заметил, что использование памяти моим кодом имеет тенденцию накапливаться до тех пор, пока я не использую всю доступную память на моей машине (от ~ 200 МБ до ~ 4 ГБ).комментируя вещи в моем коде, я пришел к выводу, что строка, которая обращается к элементу на этой карте, - это та, которая, как закомментировано, предотвращает увеличение использования памяти.Я получаю доступ к значению с помощью оператора [], и я подумал, что это может быть из-за того, что двойные значения не совсем такие, как на карте.Затем я искал случай, когда это могло бы быть:

std::map<vector<double>,double>::iterator mit = EU.find(s);     
if (mit == EU.end()){
  for (int i = 0; i < 3; i++){
    O.w(s[i]);
  }
  cin.ignore();
}

Здесь O.w(s[i]) - это функция В I классе, который я создал, для отображения содержимого на экране / записи на жесткий диск.В этом случае это просто printf("%0.10f\n",s[i]), и я использую cin.ignore() только для остановки программы, чтобы я мог проверить вывод.Что также вызывает увеличение использования памяти.Почему это так и как я могу предотвратить это?

Спасибо.

1 Ответ

3 голосов
/ 12 октября 2011

При доступе к элементу в std::map, если у индекса нет ассоциированного значения, создается новый элемент. Таким образом, каждый раз, когда вы получаете доступ к карте с новым ключом, создается новый узел для хранения нового ключа std::vector< double > и значения double.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...