А массив структур содержит члены одного типа. 
Трезвая морда unregistered | А массив структур содержит члены одного типа. |
1kvolt Member 519/1995 ответов, #5 в рейтинге 8 лет на iXBT, с марта 2017 Чаще пишет в "Общий" (28%) Россия, Мурманск |
Трезвая морда unregistered |
1kvolt Member 520/1996 ответов, #5 в рейтинге 8 лет на iXBT, с марта 2017 Чаще пишет в "Общий" (28%) Россия, Мурманск |
Трезвая морда unregistered | Ну допустим определили как тип данных, ваши стопятьсот функций уже не посыпятся, так как они будут работать с определённым типом данных. |
areex Member | 1kvolt Мы же говорили об ООП изначально. Забыл уже что ли? И какое отношение имеют си и ее структуры к ооп? Я написал выше, почему. Ну я тебе привел привел. Какой из них быстрее. То что ты это скажешь было понятно сразу, я и не спрашивал. Типичное ожидание верхогляда. Я же тебе написал, что не шарю в ассемблере. Погоди, ты на серьезных ща утверждаешь, что одно быстрее другого. Как ты это вычисляешь, если даже не можешь подсчитать? Рот палец ветер? Передача по значение займет один такт в современных CPU. Максимум три. Вторая, передача по указателю, особенно при промахе кеша, может занять сотни тактов. Но тебя это совершенно не смущает. Белые люди тебе сказали, что он быстрее... А потом просто возьми структурку чуть-чуть побольше и посчитай ещё раз. Ну взял. И? Во-вторых, ни они, ни Hance не писали, что им что-то непонятно в моих письменах. И как из этого следует, что им понятно? У тебя еще и с логикой проблемы? Ну давай, поясни, как ты добавишь адрес человека, и емайл, и телефон, например, не раздувая структуры. Этот разговор уже сильно больше срача на форуме и ты не самый благодарный слушатель, чтобы мне не лень было дизайн всерьез обсуждать. Про это есть много книжек. Да и проблемы как таковой тоже нет. Не будет она принципиально влиять на передачу по ссылке или значению. Кроме случая когда очень много полей и они все используются в одной функции. В книгах и MSDN. Нигде ни разу не встречал передачи структуры по значению, кроме случаев, когда собственно шёл рассказ о самом наличии этой возможности. В каких книгах? 70 годов? В MSDN с помощью структур эмулируется версионность. Там вообще другие сценарии. Там нужна вся структура даже если это будет медленнее. Если мы говорим о WinAPI. Исправлено: areex, 19.03.2025 01:15 Добавление от 19.03.2025 01:19: 1kvoltЯ же написал, по каким. Записи которых на Ютубы выкладывают. Так там все выкладывают. В том числе и с академиками. Ты уж сам выбираешь какие смотреть. Приводить пример и просить объявить ещё одну переменную этого типа надо? Я же тебе привел пример?! Уточни с какого раза до тебя доходит? К сообщению приложены файлы: |
1kvolt Member 521/1997 ответов, #5 в рейтинге 8 лет на iXBT, с марта 2017 Чаще пишет в "Общий" (28%) Россия, Мурманск | Трезвая морда Ну допустим определили как тип данных, ваши стопятьсот функций уже не посыпятся, так как они будут работать с определённым типом данных. Так я не писал, что они посыпятся. Я писал, что переделывать их потом замахаешься, когда придёт время осознания, что надо было передавать по указателю. areex И какое отношение имеют си и ее структуры к ооп? Да откуда я знаю? Мы обсуждали странную не имеющую смысла классификацию программирования, потом как-то перешли на ООП, потом почему-то свалились в обсуждение структур в С. ЕМНИП так прошёл наш день. Как всё это получилось именно так - я хз. Ну я тебе привел привел. Какой из них быстрее. То что ты это скажешь было понятно сразу, я и не спрашивал. Типичное ожидание верхогляда. Я же написал уже два раза - я не шарю в ассемблере. В первом примере функция, принимающая по значению, имеет на одну инструкцию больше. Но я не в курсе, которая из функций сколько циклов процессора тратит на самом деле. Если ты в курсе - так и написал бы сразу. Во втором примере (из этой цитаты) инструкции вроде одинаковые и их одинаковое количество. Вероятно, и скорость исполнения будет одинаковой. Кроме того, есть у меня подозрение, что компилятор оптимизировал в данном случае и заменил передачу по значению на передачу по указателю. Что лишний раз доказывает, что по значению передавать не оптимально. Но это - подозрение, в ассемблере - ещё раз! - я не шарю. Тут всего четыре инструкции, можешь вкратце написать, что именно в них происходит? Передача по значение займет один такт в современных CPU. Максимум три. Меня смущает, что в обоих случаях инструкции одинаковые, а также наличие каких-то DWORD PTR и адресов со смещениями. Ну взял. И? И что получилось? Напиши, пожалуйста, вкратце, что делают эти четыре инструкции. И как из этого следует, что им понятно? У тебя еще и с логикой проблемы? Когда люди не понимают - они переспрашивают. Как ты, ага. Не будет она принципиально влиять на передачу по ссылке или значению. Кроме случая когда очень много полей и они все используются в одной функции. См. выше - сдаётся мне, что компилятор не дурак и выкидывает на мороз твою передачу по значению даже в случае всего двух используемых полей. Надеяться, что компилятор исправит за тебя твой говнокод, - ИМХО так себе затея. Зачем раскидывать грабли, если можно не раскидывать? Добавление от 19.03.2025 01:41: areexТы уж сам выбираешь какие смотреть. Нет. Ютуб выбирает. Я же тебе привел пример?! Уточни с какого раза до тебя доходит? Это адресовано было Трезвая морда, по поводу структур и массивов как типов. |
Varcom Member | 1kvolt Нигде ни разу не встречал передачи структуры по значению Про json-ы всякие слышал? Да и вообще концепт "разделения по данным"? Добавление от 19.03.2025 06:48: Трезвая мордадопустим определили как тип данных, ваши стопятьсот функций уже не посыпятся, так как они будут работать с определённым типом данных. Ну как сказать... а там вдруг ОРМ или сериализатор какой через рефлекшены в стеке вызовов окажется неожиданно. |
Hance Member 2103/40400 ответов, #1 в рейтинге 24 года на iXBT, с февраля 2001 108 фото на iXBT.photo Чаще пишет в "Политика" (51%) Ватикан | 1kvolt Заметь, функций уже довольно много - и все они традиционно получают всю структуру по значению. Рано или поздно твой проектик просто встанет колом, гоняя в памяти туда-сюда копии этих структур В терминах БД: разбиваете широкую таблицу на несколько 1:1 и джойните при необходимости соединяя по id. Но это не так уж и частый случай. Это значит, что сущность представлена в нескольких boundary context: один слепой мудрец щупает ногу слона и говорит что слон похож на столб, другой мудрец щупает х...т и говорит что слон похож на шланг,... Добавление от 19.03.2025 08:46: А если это сложная не плоская структура, то передаём по указателю добавив один символ. Делов то. Но это может привести к проблемам и не должно поощряться.Исправлено: Hance, 19.03.2025 09:02 |
areex Member | 1kvolt Да откуда я знаю? Полностью запутался и утерял контекст? Я же написал уже два раза - я не шарю в ассемблере. Ты этим так невероятно гордишься, что решил вставлять к любой случайной взятой цитате? Или как этот тут понимать? В первом примере функция, принимающая по значению, имеет на одну инструкцию больше Ну хватит уже позориться-то. объясни что делает этот код? какая функция быстрее? foo: mov rax, rdi shr rax, 32 add eax, edi ret bar: mov eax, dword ptr [rdi + 4 Умный компилятор выкинул нахрен твои передачи по значению, как мне кажется. Тебе кажется. Надеяться, что компилятор исправит за тебя твой говнокод, - ИМХО так себе затея. Зачем раскидывать грабли, если можно не раскидывать? Напротив, ошибочно считая себя умнее компилятора, который в отличии от тебя, знает ассемблер и может оценить что действительно быстрее, ты и будешь получать говнокод. Который мало того, что медленнее, хуже читается, так еще и может привести к багам в будущем. Когда люди не понимают - они переспрашивают. Как ты, ага. Это какой-то природный закон? Или все же у людей должен быть интерес? |
Hance Member 2104/40401 ответов, #1 в рейтинге 24 года на iXBT, с февраля 2001 108 фото на iXBT.photo Чаще пишет в "Политика" (51%) Ватикан | areex Остальные участники это никак не комментируют. Немного Hance, но он все как раз понимает ![]() Добавление от 19.03.2025 08:58: areexкакая функция быстрее Так это всё в регистрах. Речь шла о чём то вроде
Добавление от 19.03.2025 08:59: Или хранить в нескольких boundary contextДобавление от 19.03.2025 09:05: areexПередача по значение займет один такт в современных CPU. Максимум три. Вторая, передача по указателю, особенно при промахе кеша, может занять сотни тактов Это для простейших: чисел, и т.п. Но да. Теперича не то, что давеча. А лет 35 назад учили что по ссылке дешевле. Это я хорошо помню. |
areex Member | Hance Речь шла о чём то вроде Речь была о передаче параметров по ссылку или по значению. Чувак совершенно не понимает как работают современные компиляторы. И вообще находится на пики глупости, по Даннингу-Крюгеру, или стремится к нему. Но да. Теперича не то, что давеча. А лет 35 назад учили что по ссылке дешевле. Это я хорошо помню. 35 лет назад, в принципе, было все тоже самое. Будучи большим любителем ассемблера, каковым любой станет сидя на pdp11, 6502 и z80, я помню культурный шок (а че так можно было?!), когда компилятор hello world просто распихал по регистрам, ни разу не обратившись к памяти. |
Hance Member 2105/40402 ответов, #1 в рейтинге 24 года на iXBT, с февраля 2001 108 фото на iXBT.photo Чаще пишет в "Политика" (51%) Ватикан |
Varcom Member |
Hance Member 2106/40403 ответов, #1 в рейтинге 24 года на iXBT, с февраля 2001 108 фото на iXBT.photo Чаще пишет в "Политика" (51%) Ватикан | Varcom Если ещё динамические массивы. Ну хорошо, да. Добавление от 19.03.2025 09:31: Надоела дискуссияВопрос: Объект в ООП передаётся по ссылке не из-за скорости, а чтобы обеспечить полиморфизм подтипов? Раст использует структуры. Но что если она станет большой? Ответ Добавление от 19.03.2025 09:39: Занятно, но среди топ-20 языков позволяющих писать без ООП с хорошей производительностью и полиморфизмом кроме Раст ничего пока и нет.Разве что Go — близок к требованиям, но его полиморфизм ограничен интерфейсами, а дженерики появились недавно |
Трезвая морда unregistered | Даже динамический массив под капотом каждый раз создаётся новый, а старый удаляется при изменение размеров. |
1kvolt Member 522/2004 ответов, #5 в рейтинге 8 лет на iXBT, с марта 2017 Чаще пишет в "Общий" (28%) Россия, Мурманск | Hance А если это сложная не плоская структура, то передаём по указателю добавив один символ. Делов то. А в теле функций точки на стрелочки Пушкин исправлять будет? areex Ты этим так невероятно гордишься, что решил вставлять к любой случайной взятой цитате? Или как этот тут понимать? Гордится тут нечем. Пишу много раз, потому что ты то ли понять не можешь с одного, то ли забываешь сразу. mov rax, rdi: Копирует 64-битное значение из регистра rdi в регистр rax. А в регистре это значение откуда взялось? Чувак совершенно не понимает как работают современные компиляторы. И вообще находится на пики глупости, по Даннингу-Крюгеру, или стремится к нему. Ты уже о себе в третьем лице говорить начал? |
Hance Member 2107/40409 ответов, #1 в рейтинге 24 года на iXBT, с февраля 2001 108 фото на iXBT.photo Чаще пишет в "Политика" (51%) Ватикан | Пойду, напишу что-то на Go Только что IDE нормальная появилась, всё готово из коробки. Goland. Ну и rustrover тоже свежачок Добавление от 19.03.2025 13:58: C# никак от ООП не уйдетИ это мешает уже даже на стадии проектирования |
Varcom Member |