Take your best shot!

Пользователь

Регистрация: 21.12.2014

Сообщения: 5814

Рейтинг: 1540

Take your best shot!

Регистрация: 21.12.2014

Сообщения: 5814

Рейтинг: 1540

Dyler Turden сказал(а):

У него так и написано в описании каналаPepeOK.png?1592047625

Нажмите, чтобы раскрыть...

Я коммент написал до того, как видосий открыл хехе

InversionSpells

Пользователь

Регистрация: 23.09.2018

Сообщения: 8779

Рейтинг: 3046

InversionSpells

Регистрация: 23.09.2018

Сообщения: 8779

Рейтинг: 3046

Типа тут у меня реально глаза открылись что ***ть, ссылки у переменных же сравнивать дешевле чем значения, оператор === получается сравнивает всегда только ссылки, почему мне раньше об этом не сказали умные люди?

(Это к предыдущему ответу добил)

DrZoidberg

Пользователь

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

DrZoidberg

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

InversionSpells сказал(а):

Типа тут у меня реально глаза открылись что ***ть, ссылки у переменных же сравнивать дешевле чем значения, оператор === получается сравнивает всегда только ссылки, почему мне раньше об этом не сказали умные люди?

(Это к предыдущему ответу добил)

Нажмите, чтобы раскрыть...

почему дешевле?

falitan

Пользователь

Регистрация: 26.04.2013

Сообщения: 100

Рейтинг: 127

falitan

Регистрация: 26.04.2013

Сообщения: 100

Рейтинг: 127

InversionSpells сказал(а):

Ну про let и var было довольно очевидно, он тут мне глаза не открыл.

Про ссылки я так понял что переменные хранят только ссылку до примитива или обьекта, и если компилятор не может предоставить переменной ссылку до примитива, то создает новое примитивное значение и ссылку к нему, хз надо поразбираться в вопросе. Я просто не знаком со всеми этими языками с указателями всякими и т.п. так что мне это сложно.

Но бтв в плане определений он тут всë четко обьяснил и разьяснил, и это важно, потому что без них я нифига не понимал, а щас всë сложилось в картину.


Ну минин это вообще кал, я со своим годом в программировании и полугодом в React/Vue слушаю его видосы про Vue и такой: "Вот тут верю, вот тут да поверил, да, верю, да я а шо?"



Щас там месседж модерацию проходит, а по поводу бычит - ну не, показатель неуверенности это когда ты в споре вместо аргументов бычить начинаешь, или по поводу чего то субьективного.

Когда ты публично высказываешь тезисы которые можно проверить, то когда ты разговариваешь в таком тоне то это наоборот показатель нереальной уверенности, потому что дать заднюю или оправдаться не получится.

Нажмите, чтобы раскрыть...

Нет, насколько я знаю, переменные хранят не ссылки а копии ссылок. Именно поэтому, если мы назначим (=) новое значение переменной, то старое значение в памяти останется, просто ссвлка у переменной изменится. Т.е. идентификатор не является алиасом. А чтобы получить доступ к реальному объекту в памяти, нужно менять его свойства.


Я думал это относится только к объедкам и массивам, но, оказывается, ещё и к строкам. Но самая жесть, насколько я сейчас покрутил, если в памяти уже есть строка, а потом мы приравниваем другую переменную к этой строке (не к переменной, а просто к строке такой же, которую заново написали руками), то память новая не будет занята, переменная приравняется к той же самой строке, лежавшей в памяти. С числами всё не так, все числа разные, т.е. уже по значению сравниваются, память выделяется по-любому.


Просто мозг отваливается, что если мы создаём 2 одинаковых объекта или массива, то они будут считаться разными, а со строкой нет.


А минин просто документацию переводит, ничего не объясняя (потому что сам не понимает). Он копирует код из документации, а зрители у него. В итоге никто после этого не сможет шаг в сторону сделать


Любая агрессия - страх. Если боишься, то бей или беги. Он пытается агрессией напугать, задавить авторитетом, чтобы было страшно ему перечить и в итоге никто бы не смог его задушить

какой-то Вася (2)

Пользователь

Регистрация: 25.11.2021

Сообщения: 226

Рейтинг: 141

какой-то Вася (2)

Регистрация: 25.11.2021

Сообщения: 226

Рейтинг: 141

img

И это крутой чел??

что ты тогда скажешь вот про этого чела? здесь он, например, за час портирует дум на свою собственную операционную систему.

DrZoidberg

Пользователь

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

DrZoidberg

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

falitan сказал(а):

Нет, насколько я знаю, переменные хранят не ссылки а копии ссылок. Именно поэтому, если мы назначим (=) новое значение переменной, то старое значение в памяти останется, просто ссвлка у переменной изменится. Т.е. идентификатор не является алиасом. А чтобы получить доступ к реальному объекту в памяти, нужно менять его свойства.


Я думал это относится только к объедкам и массивам, но, оказывается, ещё и к строкам. Но самая жесть, насколько я сейчас покрутил, если в памяти уже есть строка, а потом мы приравниваем другую переменную к этой строке (не к переменной, а просто к строке такой же, которую заново написали руками), то память новая не будет занята, переменная приравняется к той же самой строке, лежавшей в памяти. С числами всё не так, все числа разные, т.е. уже по значению сравниваются, память выделяется по-любому.


Просто мозг отваливается, что если мы создаём 2 одинаковых объекта или массива, то они будут считаться разными, а со строкой нет.


А минин просто документацию переводит, ничего не объясняя (потому что сам не понимает). Он копирует код из документации, а зрители у него. В итоге никто после этого не сможет шаг в сторону сделать


Любая агрессия - страх. Если боишься, то бей или беги. Он пытается агрессией напугать, задавить авторитетом, чтобы было страшно ему перечить и в итоге никто бы не смог его задушить

Нажмите, чтобы раскрыть...

Я пару раз прочитал и так и не понял утверждений в первых двух абзацах. Куча каких-то новых терминов, чем отличается ссылка от копии ссылки, что такое идентификатор и чем отличается от переменной и тем более что такое алиас. В JS мы в принципе никак напрямую с памятью не взаимодействуем же. А уж в какой момент появилось принципиальное отличие строк от чисел вообще в тумане.

Можешь как то придумать код демонстрирующий твои утверждения и, главное, механизм фальсификации утверждений?

InversionSpells

Пользователь

Регистрация: 23.09.2018

Сообщения: 8779

Рейтинг: 3046

InversionSpells

Регистрация: 23.09.2018

Сообщения: 8779

Рейтинг: 3046

DrZoidberg сказал(а):

почему дешевле?

Нажмите, чтобы раскрыть...

ну может ты меня поправишь, но в моем понимании когда происходит сравнение допустим
"foo".repeat(9999) === "foo".repeat(9998)+"bar" то если бы сравнивались значения, то сравнивались бы поочередно буквы в индексах и если они не совпадают - выбрасывалось бы false.
По факту же сравниваются ссылки, которые намного короче.
Может это для кого-то очевидно, но я этого не знал.

Теперь немного понимаю смысл иммутабельности.


какой-то Вася (2) сказал(а):

И это крутой чел??

что ты тогда скажешь вот про этого чела? здесь он, например, за час портирует дум на свою собственную операционную систему.

Нажмите, чтобы раскрыть...

крутяк, я не разработчик игр, мне всё равно


DrZoidberg сказал(а):

Я пару раз прочитал и так и не понял утверждений в первых двух абзацах. Куча каких-то новых терминов, чем отличается ссылка от копии ссылки, что такое идентификатор и чем отличается от переменной и тем более что такое алиас. В JS мы в принципе никак напрямую с памятью не взаимодействуем же. А уж в какой момент появилось принципиальное отличие строк от чисел вообще в тумане.

Можешь как то придумать код демонстрирующий твои утверждения и, главное, механизм фальсификации утверждений?

Нажмите, чтобы раскрыть...

есть такое, когда прочитал то решил что я тупой

DrZoidberg

Пользователь

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

DrZoidberg

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

InversionSpells сказал(а):

ну может ты меня поправишь, но в моем понимании когда происходит сравнение допустим
"foo".repeat(9999) === "foo".repeat(9998)+"bar" то если бы сравнивались значения, то сравнивались бы поочередно буквы в индексах и если они не

Нажмите, чтобы раскрыть...

Довольно странно притягивать свою логику и ощущение "мне кажется" к чему то, работающему сильно иначе чем человеческий мозг. Я лично проверял, разницы в скорости особой не заметил ни в строках, ни в числах, ни в объектах. Так-то согласно этому видео, надо залезть в спеку и посмотреть, но эмпирически разницы никакой.




falitan

Пользователь

Регистрация: 26.04.2013

Сообщения: 100

Рейтинг: 127

falitan

Регистрация: 26.04.2013

Сообщения: 100

Рейтинг: 127

DrZoidberg сказал(а):

Я пару раз прочитал и так и не понял утверждений в первых двух абзацах. Куча каких-то новых терминов, чем отличается ссылка от копии ссылки, что такое идентификатор и чем отличается от переменной и тем более что такое алиас. В JS мы в принципе никак напрямую с памятью не взаимодействуем же. А уж в какой момент появилось принципиальное отличие строк от чисел вообще в тумане.

Можешь как то придумать код демонстрирующий твои утверждения и, главное, механизм фальсификации утверждений?

Нажмите, чтобы раскрыть...

суть в том, что, например, если передавать объект (например, obj = {x: 1, y: 2}) в качестве параметра в функцию (foo(obj)), а потом в этой функции поменять значение obj (obj={ghoul: 993}), то при передаче по ссылке (by reference)? obj снаружи поменяется тоже. Если же, как в жс - "передача по разделению" (by sharing) , то если мы в функции поменяем значение, то внешний obj останется прежним, а внутренний obj в функции просто изменит ссылку. Т.е. алиас, как в by reference значит, что переменная "олицетворяет" собой другую переменную. Иными словами, в жс значение переменных — ссылки, а присваивание значения — присваивание ссылки, а в by reference, всё-таки, сам объект является значением. Вот, что я имел в виду и как это понимаю. А переменной я называю идентификатор, потому что привык и все так делают. Кстати, формально, считается, что в ЖС присваивается by value (значение), но только значение - копия ссылки. Тут вопрос терминологии

Про числа и строки просто коды скину и сколько памяти занимают:

var gay = {}

for (let i=0; i<1000000; i++) {


gay = String(i)

}

Это занимает 27MB

var gay = {}

for (let i=0; i<1000000; i++) {


gay = '9999999'

}
Это занимает 6,9MB

Также если просто так сделать 2 переменные с огромными одинаковыми строками, то будет память занята, как от одной здоровенной, а если в одной из этих строк изменить символ какой-нибудь, то сразу размер вырастет почти в 2 раза. С числами так не работает. Да и этот тоже сказал именно про строку, а не просто про примитивы



DrZoidberg

Пользователь

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

DrZoidberg

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

falitan сказал(а):

суть в том, что, например, если передавать объект (например, obj = {x: 1, y: 2}) в качестве параметра в функцию (foo(obj)), а потом в этой функции поменять значение obj (obj={ghoul: 993}), то при передаче по ссылке (by reference)? obj снаружи поменяется тоже. Если же, как в жс - "передача по разделению" (by sharing) , то если мы в функции поменяем значение, то внешний obj останется прежним, а внутренний obj в функции просто изменит ссылку. Т.е. алиас, как в by reference значит, что переменная "олицетворяет" собой другую переменную. Иными словами, в жс значение переменных — ссылки, а присваивание значения — присваивание ссылки, а в by reference, всё-таки, сам объект является значением. Вот, что я имел в виду и как это понимаю. А переменной я называю идентификатор, потому что привык и все так делают. Кстати, формально, считается, что в ЖС присваивается by value (значение), но только значение - копия ссылки. Тут вопрос терминологии

Про числа и строки просто коды скину и сколько памяти занимают:

var gay = {}

for (let i=0; i<1000000; i++) {


gay = String(i)

}

Это занимает 27MB

var gay = {}

for (let i=0; i<1000000; i++) {


gay = '9999999'

}
Это занимает 6,9MB

Также если просто так сделать 2 переменные с огромными одинаковыми строками, то будет память занята, как от одной здоровенной, а если в одной из этих строк изменить символ какой-нибудь, то сразу размер вырастет почти в 2 раза. С числами так не работает. Да и этот тоже сказал именно про строку, а не просто про примитивы



Нажмите, чтобы раскрыть...

String(i) - это не строка.

gay = '9999999' - а это не число.

Сорри, но ощущение, что у тебя афазия какая-то.

О том, как в функцию передаются параметры чуваку стоило бы выяснить, а так он начал доказывать отсутствие примитивных типов через ложный эксперимент и доказал вообще иное (ну и что чувак в видео ошибся).


falitan

Пользователь

Регистрация: 26.04.2013

Сообщения: 100

Рейтинг: 127

falitan

Регистрация: 26.04.2013

Сообщения: 100

Рейтинг: 127

DrZoidberg сказал(а):

String(i) - это не строка.

gay = '9999999' - а это не число.

Сорри, но ощущение, что у тебя афазия какая-то.

О том, как в функцию передаются параметры чуваку стоило бы выяснить, а так он начал доказывать отсутствие примитивных типов через ложный эксперимент и доказал вообще иное (ну и что чувак в видео ошибся).


Нажмите, чтобы раскрыть...

String() преобразует параметр в строку feelstiredman.png?1625024633 и эта строка записывается а объект. Суть примеров, что я скинул в том, что в первом случае миллион разных строк (число i переводится в строку), а во втором примере миллион одинаковых строк. В первом случае расход памяти значительно больше, что указывает на то, что в память не записываются одинаковые строки, т.е. не дублируются, в отличии от массивов и объектов (можно это и без цикла проверить, просто двумя большими строками, но сюда не вставить, но работает это аналогично)


Я же написал, что для чисел не скидывал пример, потому что они так не работают — память потребляется одинаково. PeepoAnd.png?1577443023

DrZoidberg

Пользователь

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

DrZoidberg

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

falitan сказал(а):

String() преобразует параметр в строку feelstiredman.png?1625024633 и эта строка записывается а объект.PeepoAnd.png?1577443023

Нажмите, чтобы раскрыть...

Нет, не преобразует. Есть обратное преобразование, что когда ты используешь объект String в большинстве случаев JS приводит String(value) к value через вызов метода valueOf(), который для всех таких оберток и возвращает примитивное значение. Именно по этому сложно рассмотреть разницу, но она проявляется в использовании памяти (и в некоторых других моментах, например в функции eval и создании функкции через конструктор функции типа new Function(). Есть и противоположно действующие механизмы, когда ты вызываешь, например, метод над примитивным значением типа 'helloworld'.toUpperCase() примитивное значение сначала оборачивается в объект String, а уже затем используется метод.

Можешь вот тут почитать https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#string_primitives_and_string_objects
или непосредственно в спеке.


Podpivasik

Пользователь

Регистрация: 14.07.2018

Сообщения: 30012

Рейтинг: 11111

Нарушения: 40

Podpivasik

Регистрация: 14.07.2018

Сообщения: 30012

Рейтинг: 11111

Нарушения: 40

InversionSpells сказал(а):

хз глянь трансляции, разбирает js/html под капотом


Нажмите, чтобы раскрыть...

а зачем эта духота что там под капотом? жс придумали решать бизнес задачи, и фреймворки туда же.

тебе на работе надо быстро нпм либ поставить связать и в прод, а не сидеть ковырятся что там у жс под капотом, за это не платят


Dyler Turden сказал(а):

Бэкендера порвало ?sammyyPepekek.png?1598626065

Нажмите, чтобы раскрыть...

бекенд спокойно и хорошо пишется на js ts

это скорее всего обычный клоун 1с битрикс


какой-то Вася (2) сказал(а):

И это крутой чел??

что ты тогда скажешь вот про этого чела? здесь он, например, за час портирует дум на свою собственную операционную систему.

Нажмите, чтобы раскрыть...

это типо круто или че? за час там примерно понятно что он делал, код перекинул либы поменял.

обычный еникейщик

DrZoidberg

Пользователь

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

DrZoidberg

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

Podpivasik сказал(а):

за это не платят

Нажмите, чтобы раскрыть...

Напрямую нет, но знание некоторых таких штук улучшает прохождение интервью и, в конечном счете, увеличивает ЗП. Для собственно работы не пригождалось.


Podpivasik

Пользователь

Регистрация: 14.07.2018

Сообщения: 30012

Рейтинг: 11111

Нарушения: 40

Podpivasik

Регистрация: 14.07.2018

Сообщения: 30012

Рейтинг: 11111

Нарушения: 40

DrZoidberg сказал(а):

Напрямую нет, но знание некоторых таких штук улучшает прохождение интервью и, в конечном счете, увеличивает ЗП. Для собственно работы не пригождалось.


Нажмите, чтобы раскрыть...

у фронтендеров все интервью примерно похожи плюс минус. гуглишь любой собес видеозапись 2022 года и смотришь что за вопросы. везде одинаковое. база jsовская, что такое евент лупы, что такое замыкания и т.д потом быстро по реакту какому то пробежались и лайв код. все вопросы можно задрочить даже не зная и не понимая что это. собесы по фронту на джуна и мидла реально проходятся легко. даже есть список вопросов и ответов.


а вот эта душнина как оно под капотом работает - не совсем понятно как поможет в подготовке к собесам, так как про это обычно и не спрашивают.

DrZoidberg

Пользователь

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

DrZoidberg

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

Podpivasik сказал(а):

а вот эта душнина как оно под капотом работает - не совсем понятно как поможет в подготовке к собесам, так как про это обычно и не спрашивают.

Нажмите, чтобы раскрыть...

Если хорошо и быстро проходишь предыдущие пункты (согласен, что в основном интервью одинаковы), могут спросить. Ну или ты сам во время объяснений можешь более глубоко залезть. Но да, в целом это совсем необязательный факультатив, который нужен только если занимаешься оптимизацией, ну или какой-то хитрый баг правишь.


falitan

Пользователь

Регистрация: 26.04.2013

Сообщения: 100

Рейтинг: 127

falitan

Регистрация: 26.04.2013

Сообщения: 100

Рейтинг: 127

DrZoidberg сказал(а):

Нет, не преобразует. Есть обратное преобразование, что когда ты используешь объект String в большинстве случаев JS приводит String(value) к value через вызов метода valueOf(), который для всех таких оберток и возвращает примитивное значение. Именно по этому сложно рассмотреть разницу, но она проявляется в использовании памяти (и в некоторых других моментах, например в функции eval и создании функкции через конструктор функции типа new Function(). Есть и противоположно действующие механизмы, когда ты вызываешь, например, метод над примитивным значением типа 'helloworld'.toUpperCase() примитивное значение сначала оборачивается в объект String, а уже затем используется метод.

Можешь вот тут почитать https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String#string_primitives_and_string_objects
или непосредственно в спеке.


Нажмите, чтобы раскрыть...

Так String() же именно в примитив преобразует. Это new String() создаёт объект с valueOf() = string

DrZoidberg

Пользователь

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

DrZoidberg

Регистрация: 17.01.2017

Сообщения: 1541

Рейтинг: 454

Нарушения: 30

falitan сказал(а):

Так String() же именно в примитив преобразует. Это new String() создаёт объект с valueOf() = string

Нажмите, чтобы раскрыть...

Это одно и тоже вроде.

Valkyria

Пользователь

Регистрация: 15.06.2014

Сообщения: 524

Рейтинг: 209

Valkyria

Регистрация: 15.06.2014

Сообщения: 524

Рейтинг: 209

DrZoidberg сказал(а):

почему дешевле?

Нажмите, чтобы раскрыть...

Смотря что сравниваешь. Если откинуть разные факторы аля оптимизации и прочего, а взять тупо базу, то объяснить это можно так.

Знаешь ведь что такое стек и куча?

Самое основное, что надо знать про стек, так это то что он очень быстрый. Если очень грубо, то процессору надо сделать одну операцию, что бы взять оттуда значение.

Куча –– медленная. Очень много сложных методов управления памятю, всякие поколения и другая непонятная фигня, сложно короче.

В стеке всегда хранятся ссылки на объекты и примитивы(primitive type).

К примеру, у java есть 8 примитивов: boolean , byte , char , short , int , long , float and double.

.NET: Boolean, Byte, SByte, Int16, UInt16, Int32, UInt32, Int64, UInt64, IntPtr, UIntPtr, Char, Double, Single.


Когда ты сравниваешь по ссылке, тебе нужно лезть только в стек. Когда ты сравниваешь по значению, если это не primitive type тебе надо лезть в кучу, чтобы оттуда взять значения, которые ты будешь сравнивать.

Обычно, когда ты пишешь свой equals метод для своего класса, то в начале принято проверить являются ли ссылки одинаковые(т.к. быстрее на случай если они ссылаются на один адрес, вот типичный equals в .NET и там мелкий коммент для ReferenceEquals), а потом ты уже начинаешь сравнивать поля, аля длину, id и так далее.


DrZoidberg сказал(а):

Я лично проверял, разницы в скорости особой не заметил ни в строках, ни в числах, ни в объектах.

Нажмите, чтобы раскрыть...

Я конечно за javascript пояснить не могу. Не пишу на нем. Но со строками и числами понятно, в javascript они оба примитивы.

По поводу объектов, тут ещё зависит что и как сравнивать. Если ты напишешь свой метод equals и будешь сравнивать по полям, а не просто сравнишь два класса как a == b(т.к. первые 6 проверок внутри ничем не отличаются от ===, например, если типы одинаковые, то он проверит по ссылке и т.д.), то разница должна быть. Опять же, я не специалист по javascript, но вот я написал бенчмарк

gEaT8U1.png

(можно открыть картинку в full size в новом окне)

"equals x 575,909,746 ops/sec ±1.00% (98 runs sampled)"

"=== x 1,540,886,506 ops/sec ±3.50% (75 runs sampled)"

"== x 1,620,282,133 ops/sec ±4.24% (68 runs sampled)" - тож самое, что и === т.к. типы одинаковые и он проверил по ссылке.

"Fastest is ==,==="

Как мы видим, классический equals медленнее без проверки на ссылку в начале. Если мы добавим проверку, то он станет быстрее(хотя, почему-то он все равно будет отставать на пару %, но эта библиотека benchmark немного странная, т.к. иногда тесты не запускала, мб я что-то не так делаю).

MTL

Пользователь

Регистрация: 26.11.2013

Сообщения: 11198

Рейтинг: 3340

MTL

Регистрация: 26.11.2013

Сообщения: 11198

Рейтинг: 3340

falitan сказал(а):

Странный чел, много бычит - показатель неуверенности. По поводу скорости работы let и var - прикольно, но по поводу того, как передаются переменные (по ссылке, по значению) уже что-то стрёмно: говорит, что не так, но нормально объяснить, как на самом деле не может. Вроде как, утверждает,что даже примитивы передаются через ссылку (я знаю про by sharing), показал пример со строкой, но с числом такое же не проходит. Дальше орёт про то, что нет примитивных типов данных, а есть примитивные значения. Иииии что? Какая разница? Конечно, лучше Минина, но это не показатель

Нажмите, чтобы раскрыть...

Кто хоть немного изучал Си, у того вопросов про ссылочный тип (указатель, держащий адрес данных в куче, созданные через malloc/calloc/new) и обычных переменных в функциях, которые лежат в стеке, нет.

Вопрос только в том, как этл реализовано в том или ином языке.

Например, в шарпе класс - ссылочный, а структура - переменный тип.

В плюсах вообще рофл полный. Структура и класс - одно и то же. Разница только в модификаторе доступа по умолчанию sammyyPepekek.png?1598626065