Что такое динамическая память. Утечка памяти. Стек и куча. Статическая память. Обзорный урок #45
Вставка
- Опубліковано 6 жов 2024
- Понравилось видео или оказалось полезным? Подпишись!
Что такое динамическая память. Утечка памяти. Стек и куча. Статическая память. Обзорный урок #45
Уроки по программированию
Наша группа ВК smplcode
Подписывайтесь на канал / @simplecodeit
Да.... Серия уроков - удивительное сочетание знания материала + психология + педагогика.
Лучший учитель за всё время моего обучения, низкий поклон за то что таких чайников как я подымаете с нуля, лайк слёту!
хотел освоить программирование с++, но освоил программирование в paint :D
не забудь в резюме указать это :D
Интересно кто ставит дизы?Граждане проявитесь и аргументируйте..Как по мне уроки крайне полезны,толковы и просты для понимания.
Пришел человек посмотреть видео-урок, ничего не понял(не хватило интеллекта, упорства, не прошел предыдущие уроки или все вместе..)
ему стало обидно, начал во всем винить Автора т.к такова суть человека "во всем виноваты все, но не я" и поставил в отместку диз.
Ты же программист , возьми и найди )
Завистники
Ненавистники Paint
Конкуренты?
#динамическаяпамять #SimpleCode #урокипрограммирования
6:45 - Указатель на адрес в оперативной памяти
7:38 - Адрес оперативной памяти находящийся вне программы
8:45 - Особенность С++ при работе с динамической памятью
10:37 - Чем отличаются низкоуровневые языки программирования?
Легенда❤
Спасибо, Сергей, отличный урок!) Всё понятно и доступно, бегу смотреть следующий.)
Спасибо за урок!
Сергей, вы уже мне как отец :D так просто и доходчиво объясняете. жаль по c# вы уроков давно не выпускали, надеюсь найдете силы для продолжения обучения, ни смотря ни на что. Вы нужны подписчикам
А вы знаете что с ним случилось? Просто давно не выпускает он ролики
@@Devaster-ioон украинец, в украине война. Че с ним, хз
* Самые понятные, видео уроки по c++, на всём (RU) youtube *
Это лишь 45 урок, а я уже так много узнал...
зато ты нигде бы (на русском ютубе уж точно) не нашел бы так углубленно рассказанный язык)
спустя 2 года ты уже всё узнал....
@@АртемМацуев-я7о ну если покопаться в документации на русском и английском, изучить куча книг от 1985-2021 года по с++, то можно и компьютер с помощью с++ построить.
Спидран по плюсам за неделю
@@high-level-content-maker можно своё ядро оси написать по фану
Спасибо за урок.
Очень благодарен за такой урок. Я хоть и проходил это еще на первом курсе но никак не понимал, а теперь все понял. Спасибо вам.
Пожалуйста!
Просто созрел
языки - это как механика и автомат в автомобиле. Учиться лучше на механике. шарп и джава -автомат, си и кресты - механика. Ассемблер....велосипед)))
Одноколесный х)
Ассемблер - колесо, велосипед нужно собрать самому
ассемблер - это чертеж, как сделать автомобиль)
ассемблер еб*ное НЛО, больше туда не полезу
А ассемблер это гаечный ключ для сборки запчастей для самолёта)
Всё понятно и ясно, в укрытие штурмуем 46 урок
Огромное спасибо!!!!
Огромное спасибо за урок! Доступно, доходчиво и внятно!
Привет, как успехи твои? у меня прост как-то средненько все, изучая новое, подзабываю старое(
@@аоалал-х1т Привет. Потихоньку в любом случае придется повторять то, что не используешь. Тебе главное понять принцип, устройство того, как все работает и как с этим работать. А потом достаточно будет 1-2 дня, чтобы освежить это в памяти. У меня все хорошо, так же сижу на ООП, там посложнее, чем здесь. Так что потребуется усидчивость и немало усилий над собой. Надеюсь справлюсь и надеюсь ты справишься!
@@archiechellaut9483 Я тож надеюсь, спасибо за ответ)
@@archiechellaut9483 как успехи? спустя 4 месяца
@@аоалал-х1т как успехи?
За неделю голос Сергея стал родным.
привет из 2023. Большое спасибо за уроки!
45 часть обучающего видео которое посмотрело 18 тыс. человек?Автор просто чародей)
уже 26
@@MainS_YT 31 :)
50)
60)
69)
Спасибо!
Серёга лучший !
Батька - молодец !
Интересно смотреть, узнаю много нового
Я считай из-за вашего курса по с++ понял, что это моё
Но когда впервые столкнулся, прошел несколько уроков и оставил до лучших времен, так как счел более важной целью изучение unreal engine
Однако, наверное месяц назад, я вернулся к изучению плюсов и думаю стоит воспеть хвалебную оду вам и вашему каналу за столь прекрасный материал
Всё таки здесь указана та база, без которой будет крайне сложно понимать документацию самого языка
И при этом всё объяснено наилучшим образом
Еще и звук крайне приятный, поэтому приходится смотреть в 2х, чтобы не заснуть как под сказку)
Очень доходчиво объясняет!!
Уже ставлю лайк до просмотра😊
Спасибо 🙏 😊
Спасибо!🥰
Изучал по курсу на stepik и спустя месяц перерыва решил с 0 пересмотреть. Узнал даже что-то новое. Вся информация из берды по полочкам разложилась. Впереди повторение ООП😅
большое спасибо!!!
Спасибо
спасибо)))
👍
2:45 информативно
спасибо
Спс
лучший
Спсб
После просмотра первого видео ставлю лайк еще не посмотрев
Хм, а можно написать какое-то дополнение для Visual studio, выполняющее функции "Сборщика мусора" из C#, но для С++?
следить самому не сложно, к тому же есть инструменты для анализа кода на предмет утечек. А сборщики мусора - они тормозят работу.
@@infinity-w Эх, как немного времени прошло с написания этого коммента, но так много изменилось, я нашел сейчас свое счастье в 3д дизайне (архивиз). А бросил с++ ввиду того, что мне стало ясно что перспектив по жтой отрасли в моей стране нет (я не в рф, и не в украине), а уезжать, обучившись, в другую страну не хотелось
Может дать, а может и не дать
А через сколько дождём заранее спс
Добро
7:57, да навалить дейстительно можно чего угодно, особенно когда учишь рекусию и пітаешься ее глубоко понять =D
Я неочень понял оно накапливается если не чистить на самом компьютере и если у тебя даже будет закрыта программа она там остается или только во время открытия программы она остается а после закрытия удалается?кст Спасибо за урок.
Так а как же всё-таки сделать массив (вернее кучу) с заранее неизвестным кол-вом данных ?
хотите фокус? Напишите int arr[1000000000000];
cout
И что будет
Выглядит стремно
Наверно будет биомусор
наёбнет вашу оперативку
@@crackall1946 Зависит от компилятора, но скорее всего программа тупо не скомпилируется. Компилятор выдаст ошибку. Что -то типа error "....C2148: total size of array must not exceed 0x7fffffff bytes"
thanks , 1 raz uvidel kak rabotaet ssulka
45 осталось 159
Я правильно понял, что динамическая память это и есть "куча"?
Походу да. Когда у тя не хватает, ты идёшь на кучу и берёшь сколько надо. Только не забывай периодически относить обратно😄
@@mikesteinar2713 появляются новые данные, уходят какие-то, ты для них выделяешь динамическую память в оперативной памяти. Скапливается со временем мусор, есть два варианта развития:
-Ты очищаешь мусор, ненужную память(данные) для твоей программы.
-Твоя программа-продакшн ложится на бочек и тебе Лид дает по шапке :)
@@jerrody5400 =D
чтобы программа не крашнулась если ос не выделит ей память можно сделать проверку
if (!array)
{
return 1;
}
Или так ещё можно:
if(array == nullptr)
return 1;
Просто вы сравнивайте с нулём, а я с ключевым словом, обозначающим пустой указатель
что такое array это ключевое слово ?
@@ИгроманРоман-н2ш array это указатель, который указывает на первую ячейку свободной памяти, при ее выделении под массив. Если он равен nullptr, то тогда обращаться к памяти нельзя, так как она не выделилась и указатель нулевой
А что будет, если массив должен будет расшириться, но "упрется" в другие данные. Переместится?
Не совсем, значения массива в памяти идут по порядку, поэтому память выделяется так, чтобы массив никуда не уперся.
А можно урок про нахождение строки в подстроке
Когда дойдём к изучению строк.
я не понял: что хорошего в том, что программисту самому нужно *_каждый раз_* делать эту процедуру с памятью, если это нужно делать обязательно каждый раз?
это ведь хорошо и удобно что в Java и С# это делается автоматически
Потому что язык достаточно низкоуровневый и тут почти все нужно делать вручную, это делается для максимальной производительности
Высокоуровневые языки - много функций для разных целей, мало производительности.
Низкоуровневые - почти что отсутствие готовых функций, высокая производительность.
Если взять тот же C# то можно убедиться, что сборка мусора занимает много времени. На самом деле причин довольно много, но все они сводятся к одной - очень большое количество выделений памяти.
Что значит "делать каждый раз"? Просто один раз позаботься, напиши правильный код.
За лёгкость в использовании вы платите размером и производительностью своих программ. В C++ есть варианты использования механизмов автоматического выделения памяти и работы сборщиков мусора, их можно использовать, но, если вы аккуратно пишете код, следя за областью видимости требуемых объектов, то проблем нет изначально. Сборщики мусора - для лентяев и неаккуратных программистов... ну или для тех, кто пишет небольшие программы, не заботясь о аппаратном обеспечении. Но, надо понимать, что за всё надо платить. Сборщики мусора - не волшебные эльфы, они требуют ресурсов для своей работы (процессорного времени и памяти), и да и "подметают" с задержкой.
В C++ вы можете не использовать сборщики мусора, освобождая память сами. Получите более быструю программу, занимающую меньше места.
Да, и потому квалификация программистов на таких языках как C++ требуется выше. Тут надо понимать, как всё на самом деле работает, а интерпретаторы высокого уровня очень многое "прячут под капотом".
ого, то есть вообще на целом компьютере памяти со временем будет становиться все меньше и меньше из-за потерянных адресов??
Нет конечно. Операционная система умеет сама очищать ОЗУ. Более того, ОЗУ на то и есть "оперативная" - при каждом выключении компьютера она практически полностью очищается (остаётся только очень малая часть информации, помогающая системе запуститься), а уже при включении и запуске системы, когда прогружаются необходимые для работы службы и процессы и разные программы в автозагрузке, оперативная память по-новой заполняется. А сами программы, как и сама ОС, как я уже писал выше, занимают ОЗУ только при работе, и при завершении процессов программы память снова высвобождается.
Здравствуйте! Скажите, пожалуйста: я правильно понимаю что даже если я закрою Visual studio, то весь этот мусор по прежнему останется в памяти? Перезагрузка ПК поможет в таком случае? (Тупой вопрос, понимаю)
Да, останется.
Мусор очистится если закрыть приложение. Если не закрывать и не чистить - вся система может зависнуть.
@@infinity-w Благодарю!
А почему в С# как в более устарелом языке есть функция по очистке памяти, а в C++ как в более новом языке нет ?
Потому что C# создали в период с 1998 по 2001, а C++ был создан в начале 1980ых.
Так а что же всё таки конкретно случится если закончится вся оперативная память??
Попробуй это и ты все поймешь:
while (1)
{
int *pa = new int [999];
}
Программа сгенерирует исключение std::bad_alloc (std::bad_alloc exception). Если его перехватить и обработать, то программа будет работать дальше, если этого не сделать, то программа завершит работу с ошибкой выделения памяти. Тут корректнее говорить не про всю оперативную память, а про память в "куче" (heap).
Учился по справочнику и теперь понимаю свою ошибку
Мені потроху стає страшно.
up
Можешь немного рассказать о visual c++ (VC)? СПС
9:40 это даже после закрытия программы не очищается мусорные данные?
Очищаются, только после закрытия)
Я уже ответил на подобный вопрос Тимофею Герасимчик
у, посмотрите выше ^. Там я доходчиво (надеюсь) объяснил.
@@BadDanFeeds он удалил походу коментарий, так как я не нашёл даже такого человека в коментариях
@@TGrod видимо.
@@TGrod не удалил
а после перезагрузки пк утечка останется?
Слышал есть утилиты, который находят и устраняют утечки памяти
@@АртурГрабалин-ю6х Хех) Во время) Но спасибо
@@sunmaxplay6491 нет, память очищается после перезагрузки ПК.
то есть вон та чать в оперативке, которая справа, это ДБ?
Это просто выделенная память, в том числе и для ДБ
Как я понял железо внизу, программист вверху
Ну смотря какие у программиста фетиши
@@АуеШпак ахахахах Я понял шутку)))))
Ахуеть,Елена Дмитровна спасиб за этот видеоурок 20 века черного цвета
Челсі чемпіон
Да
Мотоцикл поехал
🧠
Значит ассемблер нехуже с++, изза того что он самый низкоуровневый - но писать я на нём небуду
Не совсем правильно объяснил что значат уровни языка, Уровни это уровни абстракции, если речь идет о памяти, ты абстрагируешься от реализации работы с памятью.
X
Я бы сказал, что как раз С++ более высокоуровневый так как требует больше знаний и ответственности. Также даёт возможность не зависеть от среды разработки и работать при ограниченных ресурсах по железу! Чего уже там говорить про ассемблер :)
Это ужас , вообще не раскалывается суть зачем нужна куча . В дальнейшем если вы будете писать код на с++ не изучив что такое стэк а что такое куча , у вас будет куча ошибок и вы даже не будите знать от куда они .
Научись писать на русском языке, прежде чем иметь право что-то вякать!
Спасибо за урок!Но я не согласен с тем,что чем меньше контроль и возможностей самой программы меньше тем она ниже уровнем!Уж извините,но я так и не понял почему c++ является низкоуровневой.
Я имел ввиду совсем противоположное и специально в видео сделал на этом акцент. Посмотрите внимательней. А язык тем более низкоуровневый чем больше даёт возможностей контроля над системными и аппаратными ресурсами.
спасибо,теперь понятно!
Тои есть низкоуровневый - лучше чем высокоуровневый?
Под низкоуровневым он, скорее всего, имел ввиду, для людей с низким уровнем навыков. То есть на нем легче программировать.
Никита Швенк лол, ты рофлишь? Он же ответил, что низкоуровневый - наоборот хорошо. И низкоуровневый - не связан с навыками, если ты не криворукий.И откуда ты взял, что на нём легко программировать? Вот ты попробуй написать LogIn и Register
Спасибо за урок!
Спасибо!
Спасибо
Спасибо!