- 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
Правда, теряюсь в догадках насчет целесообразности (если это не прикол).
https://godbolt.org/z/1KhYPK1bc
Питушарское умножение:
Код чёткого сишкопацана:
Множь, множь, сука. Вот как, блядь, нужно множить, вот, быстро. Быстро Раз-раз! Множь, множь, множь-мно-мно-мнж-ж-множь! Множь! Инты! Множь!
Давай, работай, чтобы mul был.
https://godbolt.org/z/Knv576o9x
Правда, я не знаю, лучше ли 'mov eax, esi' чем 'lea eax, [rdi+1]'
теперь отличие разве что в количестве байт в опкоде
Перемещение и сложение, иногда ещё умножение на степень двойки.
А божественный mov уже больше 10 лет как выпиливается элиминатором на этапе переименования регистров и вообще не доходит до портов исполнения.
LEA выполняется на AGU.
Это значит, начиная с P6 (Pentium Pro, Pentium II), когда внедрили RISC-ядро и микрокоды? Или позже?
Сначала написал «sandy bridge», а потом стёр, заменив «больше 10 лет как», посчитав что все кому надо и так в курсе.
Уже говорил об этом на ГК:
https://govnokod.ru/26439#comment528180
https://i.stack.imgur.com/Kmmp3.png
Чтобы было понятно, там посредине Rename /Mov elimination.
Эти инструкции даже не доходят до шедулера (не забивают собой порты и RS).
на кой хуй нам еще одна лишняя прослойка, не имеющая отношения к реальности?
что блядь вообще такое XOR RAX, RAX? Это же как морская свинка : и не морская, и не свинка
нету давно никаокго RAX, это чистая абстракция (как в LLVM), и ксор тоже никакого нету
Допустим, я бы каждый раз кричал "эгегегей" перед тем, как пойти в толчок во дворе, чтобы отпугнуть медведя
И вот, медведей давно уже нет, а я все равно кричу "эгегегй", потому что производитель унитазов по этой команде включает вентиляцию, потому что начал так делать, когда медлведи еще были
Именно так. Все привыкли, и это стало идиомой.
Вот например раньше «Какой багор» было обычным спамом, которым засирали треды.
А теперь это общеупотребительное, причём стандартизированное.
Гость-линтер даже ворнинги выдаёт когда не по Стандарту — не хватает скобочки или пробела.
А это чисто говнокодовская питушня, или ещё где-то используется?
— Багор, багор тащи, упустим!
— Да где ж я тебе возьму багор? Я тебе что волжский матрос что ли?
https://yewtu.be/ag-SgljVLw8?t=1500
«Сознался обкомовец во всём и помер со страху.... Терпеть не могу обкомовцев, даже мёртвых...»
Больше нет на ютубе. Мне выдаёт только ссылки на хостинги говнорашки вроде ok и vk.
По ссылке фильм Окраина (1998)
Какой ты вор? Ты волжский грузчик, а не вор! Ты - олень самый настоящий!
то есть леа можно не делать?
Им конечно можно делать MOV, но зачем?
Зачем брать грузовик чтобы перенести килограм картошки на 10 метров?
Вообще-то там ошибка.
Оно умножало (a+1)*b.
j123123 попытался это починить &arr[a-1][b].
Но теперь уже обосрался с UB при a=0 происходит взятие за адреса за пределами массива &arr[-1][b]
Именно поэтому это питушарское говно.
Потому что это 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.
Кстати, а специфцировал ли лейаут двумреного массива?
1. В сишке нету многомерных массивов, в ней есть только array of array (of array etc).
2. Одномерный массив должен быть совместим с арифметикой указателей. Никаких дыр, размер памяти, занятой массивом, равен сумме размеров его элементов.
Поэтому этот код работает.
https://stackoverflow.com/questions/2565039/how-are-multi-dimensional-arrays-formatted-in-memory
Арифметика должна работать внутри массива, и вроде можно кончиком укозателя вылезти за пределы массива на 1, но нельзя разыменовывать (только сравнивать с другими указателями внутри того же массива)
зы: использование указательной арифметики для умножения напомнило мне LEA почему-то
Это только в структах и питушарских крестах, где всё усложнили своими классами.
В пацанской Сишке и единственно полезной структуре данных такого нет.
В общем-то, неявный pack(1) для массивов - недоработка комиссии подкомитета.
Зачем? Зачем?
Паддинг в конце добавляется только если без него у следующего объекта в массиве алаймент по пизде бы пошёл, что в случае, когда у тебя уже массив, невозможно.
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
Именно поэтому массив — единственно полезная структура данных.
Компилятор: ну правильно, у меня в массиве из трех элементов - четыре байта. А будете ворчать - вообще двенадцать сделаю.
В Кубейсике вроде динамические многомерные есть, но в Кубейсике нету указателей, поэтому там массив имеет право быть чёрным ящиком.
Разреженные массивы в каком-нибудь ЯП отдельно бывают или в качестве них везде используют хэшмапы?
Там какая-то дикая пирдоль скорби была.
REDIM вроде их обнулял при растягивании. Нужно было какое-то ключевое слово писать. Кажется Preserve.
Не знаю что в них "динамического". Это не плюсовый вектор.
Redim был больше похоже на Сишный реаллок куска памяти.
А многомерность это по сути сахарок для арифметики индексации.
Ну есть в сухом остатке Redim = free + calloc.
Redim Preserve = realloc.
В Perl, Ruby, некоторых шеллах (korn, bash) и TCL есть массивы (в питоне это лист), я не знаю, дают ли они гарантию последжовательного расположения в памяти, но вероятно дают, иначе очень трудно было бы гарантировать O(1) при доступе к елементу по индексу (а пользователь этого ждет)
В комплированных языках такие гарантии про массивы обычно дают
Мне тоже.
https://govnokod.ru/26942
https://yewtu.be/watch?v=csmOuJFOeVw
Всем сотрудникам Ростелекома
Пидары гнойные стали DNSом для FB отдавать хуйню, и у родственников перестал FB открываться не смотря на VPN.
Я не могу настроить их ротуер на свой bind, потому что тогда в случае отвала VPS всё станет раком
Попробую пушить DNS c VPNа или насктриптую смену DNS при поднятии VPN
------
В идеальном мире эти люди должны сидеть, конечно. "Я работал простым наборщиком в газете "Народный Обозреватель"" -- хуёывая отмазка. Но в реальном мире им нихуя не будет.
В снгоме это Use secure DNS toggle.
У меня так даже без vpn многие сайты одно время работали.
Я эту штуку просто сразу включаю, потому что и DNS провы давно засрали.
По дефолту 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.
чо, правда что ли??)))
бгг
Целое клабище тут, целое поле скорби
Зачем они так сделали? Кто их убил?
Какого цвета дроздофилки были?
Махнуть 3 раза веером от сердца к животу — "вы мне итересны".
21 век
Махнуть 3 раза по 100 водки — "готова трахнуться".