#java #cpp
Утекает что? Какая-то часть кода или информация находящаяся в переменной?
Ответы
Ответ 1
Если на пальцах: Все программы в рамках популярных ОС представляют собой определенным образом структурированный набор данных и инструкций. ОС знает, как работать с этими наборами данных и инструкций, и делает это в некотором заведенном порядке. В рамках ОС для этого есть объект - процесс, который подгрузит приготовленные разработчиком инструкции и данные, будет определенным образом выделять под них время процессора, порождать другие объекты ядра ОС, которые тоже что-то делают. Сами инструкции так же могут взаимодействовать с разными сущностями операционной системы, файловой системой, порождать потоки, с периферией, выводить что-то на экран, взаимодействовать при работе с оперативной памятью. Все эти ресурсы, или многие из них - разделяемые. Например, вывод на экран, т.к. экран один. Или работа с памятью, т.к. ее конечное количество. И все это делается через API ОС напрямую, или через какие-то обертки над этим API ОС. И раз память можно выделять, ее следует и освобождать, т.е. уведомлять ОС, что этот участок памяти "свободен", и может быть отдан любому другому процессу под его нужды. Контроль за тем, нужна ли программе еще та или иная память остается на усмотрение программы, ОС этим, естественно, не управляет. И раз управление выделенной на куче памятью находится на стороне программы, программа может быть построена так, что иногда будет уведомлять ОС о том, чтобы выделить ей какую-то память, но не уведомлять об освобождении. В цикле это приводит к тому, что со временем объем используемой программой памяти начинает бесконечно расти. Некоторые средства, которыми разработчик взаимодействует с API ОС, сами умеют определять, что та или иная область памяти может быть освобождена, а некоторые не умеют. В Java этим занимается абстракция "сборщик мусора". В C++ управлением этим целиком на стороне разработчика.Ответ 2
Утечка памяти - википедия. Уте́чка па́мяти (англ. memory leak) — процесс неконтролируемого уменьшения объёма свободной оперативной или виртуальной памяти компьютера, связанный с ошибками в работающих программах, вовремя не освобождающих ненужные уже участки памяти, или с ошибками системных служб контроля памяти. Что-то конкретное из этого непонятно?Ответ 3
Это когда ты указатель настроил на определенный участок памяти, а потом не освободил его и поменял указатель на другой участок памяти. В итоге ты потерял доступ выделенному участку памяти. Это и называется утечка памяти. И как написали выше. Если постоянно запрашивать у ОС память программе и не освобождать, в конце - концов, может дойти до того, что у ОС не останется свободной оперативной памяти. Компьютер начнет глючить. и придется перезагружать. Ну это если совсем прямым и тупым текстом писать.
Комментариев нет:
Отправить комментарий