- 1
- 2
- 3
- 4
- 5
unsigned mul(unsigned a, unsigned b)
{
char arr[a][b];
return &arr[a][b] - (char *)arr;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+2
unsigned mul(unsigned a, unsigned b)
{
char arr[a][b];
return &arr[a][b] - (char *)arr;
}
Умножение через VLA
j123123 09.08.2022 16:19 # +1
Steve_Brown 09.08.2022 16:58 # +1
Правда, теряюсь в догадках насчет целесообразности (если это не прикол).
3.14159265 09.08.2022 17:37 # +1
https://godbolt.org/z/1KhYPK1bc
Питушарское умножение:
Код чёткого сишкопацана:
Множь, множь, сука. Вот как, блядь, нужно множить, вот, быстро. Быстро Раз-раз! Множь, множь, множь-мно-мно-мнж-ж-множь! Множь! Инты! Множь!
Давай, работай, чтобы mul был.
Janycz 10.08.2022 00:12 # 0
https://godbolt.org/z/Knv576o9x
Правда, я не знаю, лучше ли 'mov eax, esi' чем 'lea eax, [rdi+1]'
guest6 10.08.2022 00:21 # 0
теперь отличие разве что в количестве байт в опкоде
3.14159265 10.08.2022 00:37 # +1
Перемещение и сложение, иногда ещё умножение на степень двойки.
А божественный mov уже больше 10 лет как выпиливается элиминатором на этапе переименования регистров и вообще не доходит до портов исполнения.
LEA выполняется на AGU.
KOPOBA 10.08.2022 00:54 # 0
Это значит, начиная с P6 (Pentium Pro, Pentium II), когда внедрили RISC-ядро и микрокоды? Или позже?
3.14159265 10.08.2022 01:03 # +1
Сначала написал «sandy bridge», а потом стёр, заменив «больше 10 лет как», посчитав что все кому надо и так в курсе.
Уже говорил об этом на ГК:
https://govnokod.ru/26439#comment528180
https://i.stack.imgur.com/Kmmp3.png
Чтобы было понятно, там посредине Rename /Mov elimination.
Эти инструкции даже не доходят до шедулера (не забивают собой порты и RS).
KOPOBA 10.08.2022 01:58 # +1
guest6 10.08.2022 04:21 # +2
на кой хуй нам еще одна лишняя прослойка, не имеющая отношения к реальности?
что блядь вообще такое XOR RAX, RAX? Это же как морская свинка : и не морская, и не свинка
нету давно никаокго RAX, это чистая абстракция (как в LLVM), и ксор тоже никакого нету
KOPOBA 10.08.2022 07:08 # +3
nyTuH_nugop_pidor 10.08.2022 18:58 # 0
guest6 10.08.2022 04:13 # 0
guest6 10.08.2022 04:18 # +2
Допустим, я бы каждый раз кричал "эгегегей" перед тем, как пойти в толчок во дворе, чтобы отпугнуть медведя
И вот, медведей давно уже нет, а я все равно кричу "эгегегй", потому что производитель унитазов по этой команде включает вентиляцию, потому что начал так делать, когда медлведи еще были
3.14159265 12.08.2022 23:31 # +1
Именно так. Все привыкли, и это стало идиомой.
Вот например раньше «Какой багор» было обычным спамом, которым засирали треды.
А теперь это общеупотребительное, причём стандартизированное.
Гость-линтер даже ворнинги выдаёт когда не по Стандарту — не хватает скобочки или пробела.
guest6 12.08.2022 23:33 # +1
ISO 12.08.2022 23:43 # +1
guest6 12.08.2022 23:47 # 0
А это чисто говнокодовская питушня, или ещё где-то используется?
ISO 12.08.2022 23:53 # +1
3.14159265 13.08.2022 00:24 # +1
— Багор, багор тащи, упустим!
— Да где ж я тебе возьму багор? Я тебе что волжский матрос что ли?
https://yewtu.be/ag-SgljVLw8?t=1500
nyTuH_nugop 13.08.2022 00:31 # 0
3.14159265 13.08.2022 00:41 # 0
«Сознался обкомовец во всём и помер со страху.... Терпеть не могу обкомовцев, даже мёртвых...»
Больше нет на ютубе. Мне выдаёт только ссылки на хостинги говнорашки вроде ok и vk.
По ссылке фильм Окраина (1998)
nyTuH_nugop 13.08.2022 00:53 # 0
guest6 13.08.2022 00:56 # 0
Какой ты вор? Ты волжский грузчик, а не вор! Ты - олень самый настоящий!
guest6 10.08.2022 04:15 # 0
то есть леа можно не делать?
3.14159265 12.08.2022 23:28 # 0
Им конечно можно делать MOV, но зачем?
Зачем брать грузовик чтобы перенести килограм картошки на 10 метров?
3.14159265 10.08.2022 00:34 # 0
Вообще-то там ошибка.
Оно умножало (a+1)*b.
j123123 попытался это починить &arr[a-1][b].
Но теперь уже обосрался с UB при a=0 происходит взятие за адреса за пределами массива &arr[-1][b]
Именно поэтому это питушарское говно.
Janycz 10.08.2022 00:56 # 0
3.14159265 10.08.2022 01:15 # +1
Потому что это UB.
When two pointers are subtracted, both must point to elements of the same array object or just one past the last element of the array object (C Standard, 6.5. 6 [ISO/IEC 9899:2011]); the result is the difference of the subscripts of the two array elements. Otherwise, the operation is undefined behavior.
guest6 09.08.2022 16:43 # 0
Кстати, а специфцировал ли лейаут двумреного массива?
KOPOBA 09.08.2022 17:33 # 0
1. В сишке нету многомерных массивов, в ней есть только array of array (of array etc).
2. Одномерный массив должен быть совместим с арифметикой указателей. Никаких дыр, размер памяти, занятой массивом, равен сумме размеров его элементов.
Поэтому этот код работает.
https://stackoverflow.com/questions/2565039/how-are-multi-dimensional-arrays-formatted-in-memory
guest6 09.08.2022 17:52 # +1
Арифметика должна работать внутри массива, и вроде можно кончиком укозателя вылезти за пределы массива на 1, но нельзя разыменовывать (только сравнивать с другими указателями внутри того же массива)
зы: использование указательной арифметики для умножения напомнило мне LEA почему-то
Steve_Brown 09.08.2022 18:02 # 0
3.14159265 09.08.2022 18:04 # 0
Это только в структах и питушарских крестах, где всё усложнили своими классами.
В пацанской Сишке и единственно полезной структуре данных такого нет.
nyTuH_nugop 09.08.2022 19:09 # 0
В общем-то, неявный pack(1) для массивов - недоработка комиссии подкомитета.
Soul_re@ver 09.08.2022 18:07 # +1
Зачем? Зачем?
Паддинг в конце добавляется только если без него у следующего объекта в массиве алаймент по пизде бы пошёл, что в случае, когда у тебя уже массив, невозможно.
3.14159265 09.08.2022 18:10 # 0
6.5.3.4 The sizeof and alignof operators
When sizeof is applied to an operand that has type char, unsigned char , or signed char , (or a qualified version thereof) the result is 1.
When applied to an operand that has array type, the result is the total number of bytes in the array.
When applied to an operand that has structure or union type, the result is the total number of bytes in such an object, including internal and trailing padding
Именно поэтому массив — единственно полезная структура данных.
Steve_Brown 09.08.2022 19:22 # 0
Компилятор: ну правильно, у меня в массиве из трех элементов - четыре байта. А будете ворчать - вообще двенадцать сделаю.
KOPOBA 09.08.2022 18:13 # 0
В Кубейсике вроде динамические многомерные есть, но в Кубейсике нету указателей, поэтому там массив имеет право быть чёрным ящиком.
Разреженные массивы в каком-нибудь ЯП отдельно бывают или в качестве них везде используют хэшмапы?
3.14159265 09.08.2022 18:17 # +1
Там какая-то дикая пирдоль скорби была.
REDIM вроде их обнулял при растягивании. Нужно было какое-то ключевое слово писать. Кажется Preserve.
Не знаю что в них "динамического". Это не плюсовый вектор.
Redim был больше похоже на Сишный реаллок куска памяти.
А многомерность это по сути сахарок для арифметики индексации.
Ну есть в сухом остатке Redim = free + calloc.
Redim Preserve = realloc.
KOPOBA 09.08.2022 18:22 # 0
guest6 09.08.2022 18:55 # +1
В Perl, Ruby, некоторых шеллах (korn, bash) и TCL есть массивы (в питоне это лист), я не знаю, дают ли они гарантию последжовательного расположения в памяти, но вероятно дают, иначе очень трудно было бы гарантировать O(1) при доступе к елементу по индексу (а пользователь этого ждет)
В комплированных языках такие гарантии про массивы обычно дают
KOPOBA 10.08.2022 00:32 # 0
Мне тоже.
guest6 09.08.2022 16:58 # 0
3.14159265 09.08.2022 17:29 # 0
https://govnokod.ru/26942
https://yewtu.be/watch?v=csmOuJFOeVw
guest6 13.08.2022 00:45 # 0
Всем сотрудникам Ростелекома
Пидары гнойные стали DNSом для FB отдавать хуйню, и у родственников перестал FB открываться не смотря на VPN.
Я не могу настроить их ротуер на свой bind, потому что тогда в случае отвала VPS всё станет раком
Попробую пушить DNS c VPNа или насктриптую смену DNS при поднятии VPN
------
В идеальном мире эти люди должны сидеть, конечно. "Я работал простым наборщиком в газете "Народный Обозреватель"" -- хуёывая отмазка. Но в реальном мире им нихуя не будет.
3.14159265 13.08.2022 00:46 # 0
В снгоме это Use secure DNS toggle.
У меня так даже без vpn многие сайты одно время работали.
guest6 13.08.2022 00:48 # 0
3.14159265 13.08.2022 00:49 # 0
Я эту штуку просто сразу включаю, потому что и DNS провы давно засрали.
guest6 13.08.2022 00:50 # 0
3.14159265 13.08.2022 00:50 # 0
По дефолту Cloudflare. В хроме естественно гугл и ещё что-то. Но можно и свой поставить.
UPDATE:
https://pureinfotech.com/enable-dns-over-https-chrome/
Turn on the Use secure DNS toggle switch.
Click the drop-down menu and select one of the available provider, including Google Public DNS, CloudFlare, CleanBrowsing, or Quad9.
guest6 13.08.2022 12:20 # 0
Support 13.08.2022 13:41 # 0
Desktop 18.12.2022 14:45 # 0
чо, правда что ли??)))
Desktop 18.12.2022 14:46 # 0
бгг
guest6 13.08.2022 01:02 # 0
Целое клабище тут, целое поле скорби
Зачем они так сделали? Кто их убил?
nyTuH_nugop 13.08.2022 02:10 # +1
Какого цвета дроздофилки были?
nPOnOBeDHuK 13.08.2022 22:17 # 0
guest6 13.08.2022 02:35 # 0
Махнуть 3 раза веером от сердца к животу — "вы мне итересны".
21 век
Махнуть 3 раза по 100 водки — "готова трахнуться".