У меня есть программа для рабочего стола. Большинство операционных систем запускают программу в своем адресном пространстве.Какие операционные системы освободят утечки памяти?
Когда программа выходит, я считаю, что большинство операционных систем освобождают память, выделенную программой, и возвращают ее в стек памяти для повторного использования.
Что я не уверен в том, что если программа имеет утечку памяти, будет ли память «утечка» также возвращена для повторного использования или она потеряна до перезагрузки машины?
Это вопрос к вопросу, который я задал ранее сегодня: Do Small Memory Leaks Matter Anymore?, а также несколько замечаний о том, что программная память освобождается при завершении программы. Если утечки освобождаются, когда программа завершена, то это определенно оказывает на меня меньшее давление, чтобы строго избавить мою программу от мельчайших утечек.
В частности, я программист Windows, и мне нужно знать, что происходит (потеря памяти или освобождение памяти) для Windows 98, 2000, XP, Vista и 7. Но я также хотел бы услышать, что происходит на Mac и Unix.
Уточнение: Я говорю о нераспространении утечек. Это утечки постоянного размера, которые происходят один раз при запуске программы.
Я понимаю, что утечки, которые постоянно растут в программе, являются серьезными и должны быть исправлены.
В любом случае, вопрос не в том, должны ли быть исправлены утечки. Независимо от того, вернутся ли операционные системы обратно утечку памяти при завершении программы.
+1, но K & R все еще плачет, когда ваш код течет, как бы ни мала! – phoebus
Действительно ли это во всех операционных системах? Когда ОС перешел из разделяемой памяти? – lkessler
Это верно для всех современных операционных систем, которые не работают на ограниченных устройствах (например, 8-разрядные встроенные контроллеры с низким уровнем конца). Основным фактором, включенным в эту функцию, были блоки управления виртуальной памятью и аппаратной памятью (MMU). Любая система может это сделать, но подсистемы VM/MMU облегчают ее работу. И «защищенная» память не является обязательным требованием. Например, у более старой ОС Mac не было защиты памяти (один процесс мог топать в образе памяти другого), но процессы не связывались, когда они выходили (они все равно могли протекать внутри, конечно). 7 to go –