0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 29
|
||||||
1 | ||||||
Динамические массивы: выделяем и высвобождаем память25.08.2014, 19:10. Показов 2033. Ответов 21
Метки нет (Все метки)
Доброго времени суток!
Динамические массивы: выделяем и высвобождаем память. Но сложность в том, что после выполнения delete[], память полностью не высвобождается. Когда в течении процесса, приходится выделять и высвобождать довольно много раз, то память растет как снежный ком. Как возможно решить данную проблему? Для теста:
0
|
25.08.2014, 19:10 | |
Ответы с готовыми решениями:
21
Динамические массивы: очищается ли память? Структуры: зачем мы выделяем память сами, когда это можно сделать автоматически? Динамические массивы и функции. Динамические массивы. Указатели и массивы. Индексация с помощью указателей. Передача массивов в функции. Динамические массивы (обработка матриц) |
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
||||||
25.08.2014, 19:47 | 2 | |||||
А теперь переделай свой тест так:
Запусти прогу. А теперь закомментируй delete[] в одномерном массиве и повтори (следи за диспетчером) Добавлено через 56 секунд PS: на свой страх и риск. У меня просто комп чуток подвис, но все норм
0
|
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 29
|
|
25.08.2014, 20:39 [ТС] | 3 |
Даже без проверки, скажу что забьет всю память, а мне нужно обратное, высвободить память полностью
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
||||||
25.08.2014, 20:59 | 5 | |||||
Странно, добавил свою функцию
Значит правильно люди говорят, особенности управления памятью со стороны системы.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
25.08.2014, 20:59 | 6 |
кто это сказал?
здесь возможно вторая засада сегментирование памяти примерно так есть большой кусок памяти выделили памяти 10 байт потом 20 потом 10 байт удалили потом выделили 30 байт в первый кусок, свободный где 10 байт, эти 30 не влезут значит выделится новая память а если учесть что менеджер выделяет память не побайтно а страницами, размер страницы может быть разный, зависит от системы вывод если нужно выделять/удалять нужно писать свой менеджер
1
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|
25.08.2014, 21:59 | 8 |
Я понимаю, однако моя функция полный аналог SingleArray, её то он не выкинул. Видимо моя работала в памяти, выделенной во время выполнения SingleArray
0
|
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
|
|
25.08.2014, 22:01 | 9 |
0
|
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
|
|
25.08.2014, 22:13 | 11 |
_Ivana, если так, тогда да, должен. Скорее всего оно так и есть
0
|
25.08.2014, 23:05 | 13 |
Давайте разберемся (С). Релиз же в любом случае собирается, даже для запуска отладчика? Тем более, насколько я понял, в примере из первого поста отладочная печать вызывается при выполнении экзешника, безо всякого отладчика.
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
25.08.2014, 23:42 | 14 |
а причем здесь отладчик как инструмент?
все компиляторы которые мне попадались под руку имеют два режима компиляции у VC это режим Debug никакой оптимизации, включаются защитные механизмы и в программе остается отладочная информация, в частности имена функций и режим Release отладочной информации нет,защитных механизмов нет, и включена оптимизация, уровень оптимизации задается в настройках отлаживать эту программу бесполезно, код перелопачен так, что родная мама не узнает, точки останова не срабатывают, потому что этот участок кода изменен/выброшен отладка только на низкоуровневых отладчиках, как будто чужую прогу отлаживаешь
1
|
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 29
|
|
26.08.2014, 00:36 [ТС] | 16 |
По этому добавил чтение памяти до и после процесса
Добавлено через 11 минут Не знаю как получается 0 !? в таск менеджере или после чтения памяти процесса?
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
||||||
26.08.2014, 00:54 | 17 | |||||
Полагаю, ответ уже дан. Система чудит с памятью.
Но для полноты картины: Кликните здесь для просмотра всего текста
https://www.cyberforum.ru/atta... 1408999994
1
|
18844 / 9843 / 2408
Регистрация: 30.01.2014
Сообщений: 17,285
|
|
26.08.2014, 01:03 | 18 |
Сборка релиз или дебаг? Если дебаг, то там еще хранится информация о выделенной памяти, для того, чтобы можно было отследить утечки. И это может "путать карты" при замере. Ссылку читал?
Ага понятно. Для такого применения WorkingSetSize не подходит. Нужно использовать PROCESS_MEMORY_COUNTERS_EX и поле PrivateUsage. По документации это тоже самое, что PagefileUsage, но если у тебя win7, то PagefileUsage будет всегда равен нулю, поэтому смотреть надо PrivateUsage - значение показывает общее количество памяти, которое выделил менеджер памяти для данного процесса в байтах. Вот еще тут почитай. Лучше все равно сложно написать. Короче нет проблемы тут никакой.
1
|
0 / 0 / 0
Регистрация: 13.05.2014
Сообщений: 29
|
|
26.08.2014, 01:05 [ТС] | 19 |
Возможно так и происходит, но с другой стороны если выделил Х то и высвободил Х, а не Х -/+ Y
0
|
Модератор
8908 / 6677 / 918
Регистрация: 14.02.2011
Сообщений: 23,521
|
|
26.08.2014, 01:12 | 20 |
Это уж как менеджер решит
он вполне может не удалять при каждом delete а чохом освободить сразу кучу( в смысле много, а не в смысле организации памяти) вот ты выделяешь/ удаляешь выделяешь/ удаляешь а у него еще куча памяти он на использованную ставит метку а выделяет новую, а потом когда не хватит памяти чохом всю и очистит Выделение/ удаление дело очень дорогое и посему пытается оптимизировать да и Дебиг режим мог свое слово сказать о чем говорил DrOffset,
0
|
26.08.2014, 01:12 | |
26.08.2014, 01:12 | |
Помогаю со студенческими работами здесь
20
Структуры, массивы, указатели, динамические массивы структур Динамические массивы Динамические массивы Динамические массивы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |