@@Арт1234-с3гТак на компьютере располагается не только твоя программа, их там там дофига, а все они используют одну и ту же ОЗУ, если всю память ОЗУ выделить под твою программу, то для остальных не останется места
Спасибо автору за материал! Однако хотел бы поправить неточность. Стек расширяется на встречу сегменту кода программы, начиная с верхнего адреса процесса, например 0x00EFFFFF, и когда происходит выделение памяти переменной на стеке, мы уменшаем значение stack pointer: stack_pointer -= sizeof(int32_t); // примерно так Также все это добро регулируется самой программой, а не операционной системой. ОС только следит, чтобы все было в рамках дозволенного. В любом случае, спасибо!
Прекрасный урок. Надо добавить что идея создания указателей пришла в голову создателей процессоров из необходимости и желания повышения скорости работы процессора. С указателями программа начинает работать быстрее чем без них. Здесь надо выбирать между удобством и скоростью. Если нужна скорость программы то пишете на обычном Си но долго и нудно с указанием значений регистров. А если хотите комфорт и удобство при написании то пишите на питоне джаве но зато программа работает в полтора или два раза медленнее. Си плюс плюс это компромисс между удобством и скоростью.
было бы круто про умные указатели послушать, а то вроде понимаю как ими пользоваться, но что-то не то получается автору удачи в продвижении, все приятно и понятно
Интересный подход в подаче материала, по видимому рассчитан и на начинающий уровень, но есть аспекты которые упускают даже в толстых книгах. Поскольку уже знаю это то мне трудно судить будет ли легче новичку это понять. (по тем-же указателям обычно по несколько страниц тренируются на том-же стеке в динамическую память не лезут.). Слайды кстати приятные и понятные.
6:48 - "Так как выделить память (на стеке) занимает некоторые инструкции у процессора, так же и удаление занимает некоторые инструкции" - а что это за инструкция такая "выделить память под переменную в стеке" ? Я всегда считал что используются инструкции с заданными смещениями адреса типа "mov eax, [ebp-8]" и "add [ebp-4], eax "
За доходчивость в объяснении большой лайк. Но есть некоторая неточность в комментариях кода на 6:00+... Переменная "х" не заняла область памяти переменной "q" не из-за многоядерности процессора, а из-за того, что она в одной области видимости с переменной "а". А так, молодец!
Почему указателю нужен тип, ведь это всегда адрес, т.е. число, и можно было бы предположить что int64 хватит всем? Потому что у структур и объектов нет символа окончания, как у строк, таким образом тип указателя это способ получить размер данных и, следовательно, адрес конца данных для операции перехода к ним (разименование) Хотелось бы так же разбор самих операций перехода, которые бы показали разницу между указателями и ссылками
В видео автор сказал, что разницу между ссылками и указателями он опишет в следующем видео. Можно ли узнать, в каком конкретно видео автор об этом повествовал?
Ага, помню как на паскале нам дали задачу работать с массивами 10000 на 10000 вроде, и программа не запускалась. Пришлось копать информацию по указателям.
И Стек и Куча оба находятся в оперативной памяти? Это строгое правило? А что ограничивает размеры Стека? Почему он такой ущемлённый постоянно? Казалось бы дай Стеку много места и не надо никакой кучи.
В этом контексте стек и куча это две области в оперативной памяти, которые выделяет ОС при выполнении программы. Конфигурируется также в ОС. Вот здесь описан ответ: qastack.ru/software/207386/how-are-the-size-of-the-stack-and-heap-limited-by-the-os
Память в стеке определяется на этапе компиляции программы, но программа может работать с файлами, размер которых ещё не известен. Было бы глупо написать программу, которая будет открывать фотки ограниченного программистом размера. Поэтому для возможности работы с любыми данными нужен механизм, который будет управлять выделением памяти для программы. Этот механизм реализует операционная система.
Размеры стека ограничивает операционная система, но есть средства его увеличивать при необходимости. Почему ущемленный? Потому что не разумно выделять каждой программе огромный стек. Раньше это было актуально, так как оперативка исчислялась буквально в мегабайтах. А сейчас это актуально, так как на современных ПК одновременно запущена масса процессов, большинство в фоне. Если всем им выделять огромный стек, то память будет расходоваться не рационально. Ведь занятое место под стек одной программы не может использоваться другими программами, даже если он свободен на 99%. Куча используется совместно всеми процессами и там такой проблемы нет. По идее, если у тебя на компе установлено 32-64 Гига, то тебе по барабану, какой там стек будет, пусть даже 50 или 100Мб. Но операционки пишутся не под тебя и не под твой конкретный комп. Их могут поставить и на машину всего с парой гигов оперативки и там уже размер стека будет критичен.
@@phat80 разве куча используется совместно со всеми? А как же виртуальное адресное пространство? Я читал что для каждой программы выделяется свой кусочек кучи и по ходу работы может расширяться
12:11 разве мы *ой просто не говорим, что при компиляции, для использования этой переменной мы сперва получим её значение, получим значение по адресу последнего, и будем работать с ним, то есть то, на хипели оно - нет разницы?
Здесь я пытался объяснить модели памяти и как с ними работать, с помощю указателей. Именно так как я это понимаю. Вы правы в том что указатели можно применять не только для хипа, я буду обяснять в следующих видео это, пока как я уже описал это мой способ обяснить материал, он может быть не совсем таким как есть на самом деле, и быть упрощен.
Не понятно только одно, зачем нужен медленный heap если если и stack и heap используют RAM, почему бы не использовать быстрый stack на всю выделенную память, я то понимаю что плюс кучи в том что её можно освобождать, по этому вопрос в том почему нельзя сделать освобождение памяти из стека, тогда он станет таким же медленным как куча, я полагаю... ?
А это я попытаюсь объяснить в видео о структурах данных и алгоритмах, если в двух словах то в стеке элементы идут один за другим и если тебе нужен например первый елемент, тот который пришел первый, тебе нужно вытянуть весь стек, то есть сама структура данных для других целей, если дойдут руки то будут видео о сложности алгоритмов там все станет понятней
Видео - да, замечательное, но лучше бы, конечно, говорить про память на проекцию языка Си. С выделением и освобождением памяти, как оно есть, а не через обертки new, delete. Ну это чисто мое имхо.
Алилуя. Наконец то видео о Стеке нашёл. Другие только про тарелки рассказывают, то что их надо одну на другую класть.
Ну прикинь. Давай донатить автора чтоб Он делал таких видосов еще больше
Я так понял что и стэк и куча на ОЗУ крутятся, почему тогда все ОЗУ под стэк не отдать, было бы проще!?
А куда кучу девать
только что такой же коммент хотел написать
@@Арт1234-с3гТак на компьютере располагается не только твоя программа, их там там дофига, а все они используют одну и ту же ОЗУ, если всю память ОЗУ выделить под твою программу, то для остальных не останется места
«После этого многие люди перестают изучать…» - очень смешной момент, сегодня у меня будет отличное настроение)))
Тоже смеялся с этого😅
Сам пишу на C#, но кажется я только что понял, что не понимал годами в плюсах. Спасибо !
молодец
Спасибо автору за материал!
Однако хотел бы поправить неточность. Стек расширяется на встречу сегменту кода программы, начиная с верхнего адреса процесса, например 0x00EFFFFF, и когда происходит выделение памяти переменной на стеке, мы уменшаем значение stack pointer:
stack_pointer -= sizeof(int32_t); // примерно так
Также все это добро регулируется самой программой, а не операционной системой. ОС только следит, чтобы все было в рамках дозволенного.
В любом случае, спасибо!
Это лучшее объяснение!!! Спасибо!
наконец-то адекватное видео, ни тарелок, не рекурсии с факториалом, а именно работа ОЗУ
А тарелки чем не нравятся? Можно еще взять рожок автомата.
@alienhazzard7201 тарелки разбиться могут
Дуже круто пояснюєте - дяка ))) Вчу java, але після відоса прям захотілося більше про плюси дізнатись
Прекраснейшее объяснение ! Я понял все !
Наконец-то нормальный, понятный видос по работой с памятью, спасибо больше!!!
Отличный урок! Детально, наглядно и доходчиво объясняете. Спасибо за ваш труд!
Лучшее объяснения стека и указателей.
Изучаю си. Очень помог в понимании урок по си++))) от души, мужик)
Спасибо большое за качество и простоту подачи .
Прекрасный урок. Надо добавить что идея создания указателей пришла в голову создателей процессоров из необходимости и желания повышения скорости работы процессора. С указателями программа начинает работать быстрее чем без них. Здесь надо выбирать между удобством и скоростью. Если нужна скорость программы то пишете на обычном Си но долго и нудно с указанием значений регистров. А если хотите комфорт и удобство при написании то пишите на питоне джаве но зато программа работает в полтора или два раза медленнее. Си плюс плюс это компромисс между удобством и скоростью.
Спасибо большое автору за объяснение!!!!!!
Самое лучшее видео! Спасибо вам❤❤❤
было бы круто про умные указатели послушать, а то вроде понимаю как ими пользоваться, но что-то не то получается
автору удачи в продвижении, все приятно и понятно
Отличное объяснение. Спасибо
Интересный подход в подаче материала, по видимому рассчитан и на начинающий уровень, но есть аспекты которые упускают даже в толстых книгах. Поскольку уже знаю это то мне трудно судить будет ли легче новичку это понять. (по тем-же указателям обычно по несколько страниц тренируются на том-же стеке в динамическую память не лезут.). Слайды кстати приятные и понятные.
Спасибо! Очень понятно и доходчиво. Узнал что-то новое )
Лучший ролик про указатели .
Спасибо за видео автору, желаю вам здоровья.
6:48 - "Так как выделить память (на стеке) занимает некоторые инструкции у процессора, так же и удаление занимает некоторые инструкции" - а что это за инструкция такая "выделить память под переменную в стеке" ? Я всегда считал что используются инструкции с заданными смещениями адреса типа "mov eax, [ebp-8]" и "add [ebp-4], eax "
Просто Агонь 👍
Программа начинает выполнение с функции точки входа. Точка входа задается параметром линковщика /ENTRY. По умолчанию main
очень хорошо объясняешь, спасибо
Очень полезный видео ролик, побольше бы таких ❤
лучшее объяснение, спасибо
За доходчивость в объяснении большой лайк. Но есть некоторая неточность в комментариях кода на 6:00+... Переменная "х" не заняла область памяти переменной "q" не из-за многоядерности процессора, а из-за того, что она в одной области видимости с переменной "а". А так, молодец!
А почему так.?
мужик, ты лучший!
очень круто что есть такие обяснения
Невероятный урок!
Моё почтение, хорошее видео.
7:28 - "Закончилась инструкция по удалению (переменной) q из памяти". И что это за инструкция такая "удалить память на стеке" ?
Вот это классное объяснение, рекомендую!
Классное видео. Спасибо.)
Подпишусь чтобы не потерять канал.)
Почему указателю нужен тип, ведь это всегда адрес, т.е. число, и можно было бы предположить что int64 хватит всем?
Потому что у структур и объектов нет символа окончания, как у строк, таким образом тип указателя это способ получить размер данных и, следовательно, адрес конца данных для операции перехода к ним (разименование)
Хотелось бы так же разбор самих операций перехода, которые бы показали разницу между указателями и ссылками
7:00 Переменная из стека не может удалиться "отложенно/когда-то". Похоже, что у вас инструкция "if (true)" тоже взяла для своих нужд 4 байта стека.
Спасибо, очень доходчиво!
Прекрасное объяснение
вау, наконец-то я понял. СПАСИБО
Спасибо, полезный контент!
А как можно узнать размер стека в памяти для своей машины?
Ты крутой, просто, все понятно, можна прям под еду смотреть и все понятно)))
Вы не предоставляете обучение под вашим руководством?
бро, лучшее видео по стеку в плюсах. спасибо!!
В видео автор сказал, что разницу между ссылками и указателями он опишет в следующем видео.
Можно ли узнать, в каком конкретно видео автор об этом повествовал?
Гений 🤷♀️
🛐🛐🛐
👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍
Хороший канал!
а ссылки где хранятся ? на стеке или на куче ?
В golang есть указатели и это прекрасно.
Почему у Вас на компьютере стек растёт вверх? Должно же поидее быть наоборот, вниз. У вас какая-то редкая для архитектура процессора?
Принято растить стек снизу вверх, если это просто визуализация, чтобы было понятнее
Спасибо
Ага, помню как на паскале нам дали задачу работать с массивами 10000 на 10000 вроде, и программа не запускалась. Пришлось копать информацию по указателям.
Отличное чувство смотреть про стек и память с++ после рвоты с++ структур(хз почему?)
А в си также устроенно? Там тоже поинтеры находятся в хипе или там все на стеке лежит?
Да
Нет
И Стек и Куча оба находятся в оперативной памяти? Это строгое правило?
А что ограничивает размеры Стека? Почему он такой ущемлённый постоянно?
Казалось бы дай Стеку много места и не надо никакой кучи.
В этом контексте стек и куча это две области в оперативной памяти, которые выделяет ОС при выполнении программы. Конфигурируется также в ОС. Вот здесь описан ответ: qastack.ru/software/207386/how-are-the-size-of-the-stack-and-heap-limited-by-the-os
Память в стеке определяется на этапе компиляции программы, но программа может работать с файлами, размер которых ещё не известен. Было бы глупо написать программу, которая будет открывать фотки ограниченного программистом размера. Поэтому для возможности работы с любыми данными нужен механизм, который будет управлять выделением памяти для программы. Этот механизм реализует операционная система.
Размеры стека ограничивает операционная система, но есть средства его увеличивать при необходимости. Почему ущемленный? Потому что не разумно выделять каждой программе огромный стек. Раньше это было актуально, так как оперативка исчислялась буквально в мегабайтах. А сейчас это актуально, так как на современных ПК одновременно запущена масса процессов, большинство в фоне. Если всем им выделять огромный стек, то память будет расходоваться не рационально. Ведь занятое место под стек одной программы не может использоваться другими программами, даже если он свободен на 99%. Куча используется совместно всеми процессами и там такой проблемы нет. По идее, если у тебя на компе установлено 32-64 Гига, то тебе по барабану, какой там стек будет, пусть даже 50 или 100Мб. Но операционки пишутся не под тебя и не под твой конкретный комп. Их могут поставить и на машину всего с парой гигов оперативки и там уже размер стека будет критичен.
@@phat80 разве куча используется совместно со всеми? А как же виртуальное адресное пространство? Я читал что для каждой программы выделяется свой кусочек кучи и по ходу работы может расширяться
@AnderX003
Смешались в кучу кони, люди…
12:11 разве мы *ой просто не говорим, что при компиляции, для использования этой переменной мы сперва получим её значение, получим значение по адресу последнего, и будем работать с ним, то есть то, на хипели оно - нет разницы?
Здесь я пытался объяснить модели памяти и как с ними работать, с помощю указателей. Именно так как я это понимаю. Вы правы в том что указатели можно применять не только для хипа, я буду обяснять в следующих видео это, пока как я уже описал это мой способ обяснить материал, он может быть не совсем таким как есть на самом деле, и быть упрощен.
Не понятно только одно, зачем нужен медленный heap если если и stack и heap используют RAM, почему бы не использовать быстрый stack на всю выделенную память, я то понимаю что плюс кучи в том что её можно освобождать, по этому вопрос в том почему нельзя сделать освобождение памяти из стека, тогда он станет таким же медленным как куча, я полагаю... ?
А это я попытаюсь объяснить в видео о структурах данных и алгоритмах, если в двух словах то в стеке элементы идут один за другим и если тебе нужен например первый елемент, тот который пришел первый, тебе нужно вытянуть весь стек, то есть сама структура данных для других целей, если дойдут руки то будут видео о сложности алгоритмов там все станет понятней
@@softwaredevelopment884 Понятно, спасибо, нужно глянуть потом это видео.
Размер player 8 потому что main возвращает int?
Нет, размер указателя на player 8 байт(тоесть 64 бита) так как система на компе 64 битная
стек он же в оперативке. почему же в отношении его применено слово быстрый? стек это же не КЭШ процессора
О господи…
Сделайте пожалуйста подробную работу архитектуру фон неймана
Возможно в будущем еще сделаю но сейчас в планах нету, хочу доделать последовательно этот курс
легенда я не оч понимал как работает сама куча со стеком все норм но куча чото полурак полу чо
если на 1:22 посмотреть прищурившись в нижний правый угол, там будет флаг
У меня не получается увидеть его
Видео - да, замечательное, но лучше бы, конечно, говорить про память на проекцию языка Си. С выделением и освобождением памяти, как оно есть, а не через обертки new, delete. Ну это чисто мое имхо.
И на Palm OS Все через кучу.
23:49 :D
в избранное!
Да нунахуй хорошо, что я джаваскриптизер. 😂
Heap тоже ограничен
Спасибо