![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| null56 |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: нет Всего: 12 |
Всем привет
Хотел поинтересоваться особенностью системных вызовов выделения и освобождения памяти
Написал небольшой пример, результат которого меня заинтересовал
По русски.... в цикле выделяем участки памяти произвольного размера и тут же освобождаем этот участок (размеры памяти выделяется довольно большие ~ 80 мегабайт и больше) Что меня насторожило: размер занимаемой программой памяти после отработки этого цикла вырос с 848 килобайт до 1068 килобайт... Хорошо, я предположил, что операционка начинает кешировать выделенные участки памяти для возможных повторных обращений, чем больше было запрошено памяти, тем больше этот кеш и тем больше приложение занимает памяти Но затем я дополнил программку другим циклом
тут уже выделялись участки памяти по страницам, но заметно меньшего размера и ВСЁ РАВНО РАЗМЕР ИСПОЛНЯЕМОГО ПРИЛОЖЕНИЯ ВЫРОС НА НЕСКОЛЬКО КИЛОБАЙТ Вопрос: 1) подскажите пожалуйста, с чем связано это увеличение памяти? 2) почему моя теория "о наибольшем участке" неверна? 3) можно ли как - нибудь решить это проблему из режима пользователя? ЗЫ: если нужно что - то почитать, направьте пожалуйста Заранее благодарен за помощь |
||||||
|
|||||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
полагаю, опечатка, или что-то в этом роде напрямую malloc не влияет на память программы, если мы конечно об одном и том же говорим, я склоняюсь к тому, что ты имеешь ввиду столбик "Память" в диспетчере задач это просто индикатор физически отображенной памяти (текущий уровень в working set), которая в принципе зависит от интенсивности обращений к участку и в общем случае, максимальный и минимальный размер такого отображения заключен в небольшом диапазоне: ~30 страниц, если память мне не изменяет (можно эти параметры конечно и менять, но уже с соответствующими правами администратора, а по-умолчанию, для простых смертных эти права выключены) кэш на то и нужен, что позволяет на ограниченном "быстом" ресурсе (в окне) просматривать "медленные", но большие, в одном случае - просто для покрытия всего адресного пространства, сколь велико бы оно ни было, а в другом - для возможности оперативного переключения таких ресурсов (многозадачность) -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: нет Всего: 12 |
да, извиняюсь... Имел в виду физическую память, размер которого отображает диспетчер задач
да, я имею в виду его GremlinProg, то есть этот параметр не несет за собой реальной информации об использовании памяти и рано или поздно он освободит её? я к чему задал вопрос, просто пишу приложение, которое должно работать длительное время. если это приложение потихоньку будет отжирать физической памяти, то через некоторое время это будет уже слишком накладно. сейчас думаю, как снизить количество системных вызовов |
|||
|
||||
| Comm |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 31.8.2007 Где: Санкт-Петербург Репутация: нет Всего: 1 |
-------------------- =))))) ![]() |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
для программиста, в сегодняшнем понимании - нет не несет, если опираться на то, что он оперирует виртуальной, а не физической памятью довольно туманная формулировка, но если переживаешь именно за утечки памяти (memory leaks), то можно пользоваться довольно удобной утилитой: _CrtDumpMemoryLeaks, как раз для malloc, free, new, delete и т.п.: http://www.google.ru/search?q=CRT+memory+leaks -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| null56 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 721 Регистрация: 19.3.2008 Репутация: нет Всего: 12 |
GremlinProg, ну суть в чем.... Я тему зовел из - за этой колонки диспетчера задач с физической памятью... Резервирую блоки(malloc), освобождаю(free), но в этой колонке, после освобождениея памяти, размер медленно, но верно разрастается по сравнению с только что запущенным приложением... это насторожило
GremlinProg, спасибо за дебагер и советы Comm, спасибо за статью, прочитал с удовольствием, жаль что мало их там, но из первой части сделал выводы, которые побудили на перепроектирование программы |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |