|
187 / 172 / 38
Регистрация: 03.08.2012
Сообщений: 596
|
||||||
Std::vector и утечки памяти24.06.2016, 21:39. Показов 3880. Ответов 7
Метки нет (Все метки)
Проблема проявляется исключительно на Linux
При заполнении любого контейнера большим количеством данных с последующим уничтожением контейнера остается занято приличное количество памяти. Пример кода:
Памяти занято при gcc 4.9.2 - ~400 мб VIRT и RES При gcc 6.1 - ~200мб VIRT и RES Очистка кеша вручную не помогает Заранее благодарен за возможные решения P.S. На винде таких проблем не возникает
0
|
||||||
| 24.06.2016, 21:39 | |
|
Ответы с готовыми решениями:
7
Std::vector push_back vs emplace_back std::vector доступ по индексу vs доступ по итератору Освобождение памяти после std:bind |
|
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
|
|
| 25.06.2016, 09:48 | |
Сообщение было отмечено Flassie как решение
Решение
Flassie, это особенности работы с паматью в libc.
Процесс не отдает память системе на тот случай, что она еще понадобится. Сисшная malloc_trim(0) должна помочь. Частично (не думаю, что значительно) может помочь освобождение каждой строки.
1
|
|
|
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
|
||||||
| 25.06.2016, 10:33 | ||||||
|
Проблема в фрагментации кучи.
Стандартный аллокатор из glib возвращает системе свободные страницы только с её вершины. То есть если, условно говоря, выделить двести метров памяти, потом ещё пять и опять двести, а затем высвободить оба больших блока, то системе вернется только последний из них. Это _не_ утечка памяти в прикладном её понимании, т.к. аллокатор будет выделять место в первом пустом блоке при новых вызовах. Понять, что за данные остались в куче после того, как(казалось бы) всё высвобождено, можно запустив valgrind --leak-check=full --show-leak-kinds=all :
Если это необходимо, то бороться с таким поведением можно использованием более другого аллокатора.
1
|
||||||
|
187 / 172 / 38
Регистрация: 03.08.2012
Сообщений: 596
|
|||
| 25.06.2016, 11:01 [ТС] | |||
|
Добавлено через 18 минут
0
|
|||
|
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
|
||
| 25.06.2016, 18:03 | ||
).Определитесь с тем, что вы называете "утечка памяти" и чем вы её меряете. По стандартам возвращаемая процессом динамически полученная ранее память не обязана сразу же возвращаться в систему. Она остаётся за процессом, чтобы не дёргать память вперёд-назад на случай (вероятный) следующих размещений. Это никак не считается утечкой памяти.
0
|
||
|
187 / 172 / 38
Регистрация: 03.08.2012
Сообщений: 596
|
||
| 25.06.2016, 23:05 [ТС] | ||
|
Ну вы уж извините) А когда приложение впустую занимает приличный объем памяти - это не очень нормально, как по мне Хотя в некоторых случаях, отрицать не стану, это полезно
0
|
||
|
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
|
|||
| 25.06.2016, 23:18 | |||
. Особенно в многозадачных ОС: когда где-то памяти будет не хватать - вот тогда у вас немедленно её и отберут.P.S. Вы должны при этом ещё принимать во внимание такие вещи, не очень заметные с уровня пользовательского программирования, как: MMU, отображение логических страниц на физическую память, выделение физической памяти только и исключительно страницами ... и др. подобные вещи. Дурные привычки это: а). изучать программирование в Windows + б). переносить полученные в Windows стереотипы на другие (нормальные) системы.
0
|
|||
| 02.07.2016, 15:03 | ||
|
0
|
||
| 02.07.2016, 15:03 | |
|
Помогаю со студенческими работами здесь
8
std::string, std::fstream, ошибка кучи Как обращаться к vector<vector>?
Разделить vector<string> на два vector<string> Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|