Когда я объявляю переменную в функции, я использую некоторую память. Когда функция выполняется, выполняя свою работу, освобождается ли память?Где переменные функции идут?
ответ
Все автоматические переменные хранения будут освобождены, когда они выходят из области видимости, и вы должны быть четко о динамически выделенных из них:
void foo()
{
int x;
int* y = new int;
//You get a memory leak with each call to foo without the following line
delete y;
} //x is freed here
Нет такой вещи, как динамические переменные. Есть только динамические * объекты *. Все переменные охвачены; они имеют ту же область, что и их имя. (Так что 'y' просто выходит из сферы действия, как и должно быть, и все хорошо.) –
@KerrekSB Это какая-то шутка? –
@ScepticalJule: Нет, он пытается исправить ошибочный ответ :-) –
Возможно, самое главное это вы понимаете понятия стека и кучи и этот пост, как очень хорошие объяснения по этому вопросу:
What and where are the stack and heap?
Одаренность в сторону (auto_ptrs и т.п.), суть его в том, что, если они выделяются в стеке, то они будут освобождены, когда они Lea В этом случае вы должны сами позаботиться о том, чтобы освободить их. Если вы поймете вышеизложенное, вы лучше поймете, что искать.
Вы должны прочитать о продолжительности автоматического и динамического хранения, потому что вы неправильно поняли «стек и кучу». –
@ Планы на орбите - это не то, что я неправильно понял стек и кучу ИМО, но вы правы, что в терминах на С ++ я должен был описать это в этих терминах. В конце ваши переменные могут быть только в стеке или куче, и вы освобождаете их только тогда, когда стек отключается или вы вызываете функции дезактивации, соответственно. Но я все-таки понимаю вашу точку зрения! – RMo
Вы имеете в виду «объекты», а не «переменные», и они могут быть абсолютно чем-то иным, чем стек или куча. _В этом-то и дело! :) –
- 1. Где неинициализированные глобальные переменные идут после инициализации?
- 2. Где переменные, объявленные в IIFE, идут?
- 3. Куда идут локальные переменные?
- 4. MEAN-stack mongoose, где функции идут?
- 5. Где методы идут в фрагменте?
- 6. Где мои настройки идут?
- 7. Где идут новые методы?
- 8. Где идут атрибуты сборки?
- 9. Шаблон модуля Javascript, куда идут частные переменные?
- 10. Экспресс js Где идут настройки?
- 11. Рельсы, куда идут глобальные переменные?
- 12. Где эти части кода идут?
- 13. Wordpress, где мои сообщения идут?
- 14. Где идут журналы из Global.java?
- 15. Где идут .detach-ed объекты?
- 16. Где идут сторонние JS-библиотеки?
- 17. установить переменные, которые идут внутри array_merge_recursive
- 18. Переменные идут нуль после выполнения блока
- 19. пользовательские переменные функции получают перезаписанные где-то
- 20. Контроль, где HTTP-запросы идут в AWS
- 21. Где пути для изображений идут в Backbone?
- 22. Бизнес-правила - где они идут в ООП?
- 23. Где вызовы кеша идут в MVC
- 24. где пакеты haskell в nixpkgs идут?
- 25. Где идут изображения в IONIC 2
- 26. где все шаблоны в xcode идут?
- 27. Где идут журналы с функцией error_log?
- 28. Rails 4 - Где идут активы поставщика?
- 29. Где идут сообщения при использовании pythoncom.PumpMessages()?
- 30. Письмо express.js приложение. Где идут вспомогательные методы?
Вы когда-нибудь слышали о «стеке»? - Я предполагаю, что вы говорите об основном типе, иначе можно было бы использовать кучу, и ее память освобождается, когда var выходит за рамки (или аналогично), если класс предоставляет правильный деструктор ... (Нет, если вы конечно, создал экземпляр с новым: в этом случае это ваш долг) – ShinTakezou
Пожалуйста, не просто отправляйтесь и делайте предположения. –