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