Утечки памяти постоянные?

Когда в программе используется malloc и не освобождается память, теряется ли она на компьютере, на котором была запущена программа, после того, как программа была запущена и завершена?

Не на современной ОС. Боюсь, это довольно широкий вопрос.

StoryTeller - Unslander Monica 29.03.2018 07:16

Все ресурсы, полученные процессом, будут освобождены современной ОС после завершения процесса. Обратите внимание, что это не будет изящный выпуск (ваш код не может это обработать).

Marek R 30.03.2018 00:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
699
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это зависит от операционной системы (точнее, от вашей конкретной реализации C, которая неявно содержит вашу ОС). Вам нужно узнать больше об операционных системах, например учебник Операционные системы: три простых штуки (загружается бесплатно).

В современных ОС, таких как Linux, Unix (включая MacOSX, Android и т. д.), Windows и т. д., Каждый процесс имеет свой собственный виртуальное адресное пространство. Когда процесс завершается, все его виртуальное адресное пространство исчезает (включая любые «утечки памяти»).

На практике malloc и free построены над примитивами операционной системы, управляющими виртуальным адресным пространством (в Linux это примитивы системные вызовы, такие как mmap (2) и munmap и, возможно, старый сбрк (2)) и пейджинг. Обратите внимание, что free обычно не освобождает память для ОС (например, с munmap), но чаще отмечает освобожденную зону памяти как повторно используемую будущими malloc-s.

Однако избегание утечки памяти - хорошая дисциплина (и она необходима для долгоживущих процессов, таких как серверы). Тогда такие инструменты, как Valgrind или адресные дезинфицирующие средства, могут помочь в их обнаружении.

Хороший книга на вывоз мусора дает вам концепцию и терминологию, относящуюся к управление памятью. Читайте также про RAII. Подумайте о циркулярные ссылки, умные указатели, слабые ссылки и т. д.

(on old systems like MS-DOS, this might have not been the case, but details matter a lot; on some embedded systems, too)

Другие вопросы по теме

Как отслеживать использование памяти для каждого маршрута в Apache Camel
Используете ли в C++ много времени на новые и удаляющие операторы?
Эффективность использования пространства в pandas df для серий с двоичными значениями
Разница в использовании памяти при использовании объектов и примитивных значений в качестве аргументов функции
Может ли назначение многих базовых типов данных вызвать утечку памяти и можно ли этого избежать?
Допустимо ли использовать указатель выделенного блока памяти в качестве уникального внутреннего хэша или идентификатора во время выполнения?
Необычное потребление памяти при работе с фрагментами
Что именно set_bh_page делает для данного заголовка буфера в кеше страницы?
C / C++ Как очищается память, выделенная вызовом system / stdlib?
Python / Pandas - проблема с памятью при применении функции к огромному фрейму данных