Якщо я запрограмував - не знаючи цього - витік пам’яті, а додаток припиняється, чи звільняється просочена пам’ять?
Якщо я запрограмував - не знаючи цього - витік пам’яті, а додаток припиняється, чи звільняється просочена пам’ять?
Відповіді:
Так, "витік пам'яті" - це просто пам'ять, на яку процес більше не має посилання, і тому більше не може бути вільним. ОС все ще відслідковує всю пам'ять, виділену процесу, і звільнить його, коли цей процес припиниться.
У переважній більшості випадків ОС звільнить пам'ять - як у випадку з нормальними "ароматами" Windows, Linux, Solaris тощо. Однак важливо зазначити, що в спеціалізованих середовищах, таких як різні операційні системи в режимі реального часу, пам'ять може не звільнятися, коли програма припиняється.
ОС, що виконує вашу програму, зазвичай робить пам'ять очищення, яка не звільнена явно, і обробляє, які не закриваються явно, але це не гарантується стандартом C ++. Ви можете знайти якийсь вбудований пристрій, який не звільняє протікання пам'яті.
При цьому Windows і всі дистрибутиви Linux, які я коли-небудь бачив, звільняють витоки пам'яті.
Ви можете легко створити величезний цикл витоку пам'яті, хоча протестувати його самостійно. Спостерігайте за тим, як зростає використання оперативної пам’яті, а потім закрийте програму. Ви побачите, що використання оперативної пам'яті знижується.
Ще одне врахування при використанні C ++ полягає в тому, що якщо ви не видаляєте пам'ять, виділену купу, то ваші деструктори також не будуть викликані. Іноді у вас з’являться й інші побічні ефекти, якщо ваші деструктори не будуть викликані.
Зазвичай, так. Деякі системи підтримують такі речі, як блоки спільної пам’яті, які автоматично не звільняються, коли програма виходить. Більшість як і раніше зберігає кількість посилань і видаляє її, коли всі програми, що відкрили її, виходять, але деякі не мають (наприклад, у 16-бітної Windows було кілька типів елементів, які залишатимуться виділеними, навіть коли нічого до них не згадувалося - хоча Зазвичай він випадає з інших причин, перш ніж достатньо цього накопичилося, щоб викликати проблему ...)
Залежить від того, яку пам’ять ви просочилися. Деяка пам'ять не може бути відновлена ОС. Однак більша частина пам'яті на більшості ОС буде автоматично відтворена, коли процес завершиться.