- 1
- 2
- 3
- 4
void print_line(char *s){
for(int i = 0; i < strlen(s); i++) putchar(s[i]);
putchar('\n');
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−3
void print_line(char *s){
for(int i = 0; i < strlen(s); i++) putchar(s[i]);
putchar('\n');
}
Почему C работает медленнее чем JavaScript ?
HoBorogHuu_nemyx 17.01.2019 18:18 # +2
Цикл for в Си не кэширует условия (в отличие от Паскаля, например, где границы индекса определяются один раз), поэтому будет вызывать strlen на каждой итерации.
Итого сложность получится O(n²).
Вот такой вариант быстрее:
cykablyad 17.01.2019 18:22 # +1
KaBauHblu_nemyx 17.01.2019 18:35 # 0
guest8 17.01.2019 18:38 # −999
HoBorogHuu_nemyx 17.01.2019 19:00 # 0
guest8 17.01.2019 19:05 # −999
HoBorogHuu_nemyx 17.01.2019 19:07 # 0
guest8 17.01.2019 19:12 # −999
HoBorogHuu_nemyx 17.01.2019 19:17 # 0
Но именно это и позволяет досовскую программу запустить в окне (если бы это было не так, она бы пачкала своим выводом окна).
gueest8 17.01.2019 19:21 # +1
А даже если бы и вызвал, то в регистр сегментов надо загрузить адрес такой структуры где сказано что это сегмент 16битного кода, иначе процессор не сможет выполнить код биоса, ну тупо может быть invalid opcode.
А судя по "asm (" и "movw " (AT&T syntax) речь идет о каком-то unix-like.
Так что режим там сто пудово защищенный 32х битный.
Может быть это Xenix: там 16бит, но все равно защищенный (просто без виртуальной памяти)
gueest8 17.01.2019 19:23 # 0
cykablyad 17.01.2019 18:47 # 0
guest8 17.01.2019 18:53 # −999
bormand 17.01.2019 19:08 # 0
HoBorogHuu_nemyx 17.01.2019 19:09 # 0
guest8 17.01.2019 19:10 # −999
guest8 17.01.2019 19:10 # −999
bormand 17.01.2019 19:25 # 0
guest8 17.01.2019 19:28 # −999
bormand 17.01.2019 19:50 # +3
guest8 17.01.2019 20:01 # −999
bormand 17.01.2019 19:40 # +2
HoBorogHuu_nemyx 17.01.2019 19:50 # 0
Теперь норм.
bormand 17.01.2019 19:52 # 0
KaBauHblu_nemyx 17.01.2019 19:58 # +4
guest8 17.01.2019 19:55 # −999
bormand 17.01.2019 19:56 # 0
guest8 17.01.2019 20:00 # −999
bormand 17.01.2019 20:04 # 0
HoBorogHuu_nemyx 17.01.2019 20:42 # 0
HoBorogHuu_nemyx 17.01.2019 20:05 # +1
> movb $4, %eax сработает?
Ты хочешь в 32-битный регистр положить 8-битное число? Серьёзно? Или пиши movd, чтобы кокококонстанта была 32-битной, или используй movs/movz, расширяющие число (но они умеют расширять только в два раза: 8 бит до 16, 16 до 32, 32 до 64 и так далее).
Можно, кокококонечно, написать movb $4, %al и получить в трёх старших октетах мусор.
gueest8 17.01.2019 20:12 # 0
ой я дурак-дурак, конечно я хотел movd это же дабл ворд на интеле.
А можно положидь туда нуль а потом положить в нижнюю половинку (al), но это конечно говнецо
хих, прикольно, я давно на асме не писал
HoBorogHuu_nemyx 17.01.2019 20:40 # 0
• movl $, %eax займёт 5 байт.
• xor eax, eax + mov al, 4 (пишу в синтаксисе «Интела») займёт 2 + 2 = 4 байта (ещё и во флаги насрёт).
• lea eax, [4] займёт 6 байт (когда в квадратных скобках смещение без регистра, нужна 32-битная константа).
• Можно исхитриться и написать lea eax, [eax + 4], тогда она займёт 3 байта (смещение может быть 8-битным или 32-битным), но нужно обнулить eax (самый короткий способ сделать это займёт 2 байта). Итого xor eax, eax + lea eax, [eax + 4] займут 5 байт.
• Погуглил про movsx и movzx (давно ими не пользовался). Оказывается, можно 8 бит расширить сразу до 32, но работают они только с регистрами или с памятью.
Тогда mov al, 4 + movzx eax, ax займут 2 + 2 = 4 байта.
HoBorogHuu_nemyx 17.01.2019 21:01 # 0
mov al, 4 + cbw + cwde займут 4 байта.
bormand 17.01.2019 21:11 # +1
Сначала эти мелкие инструкции засрут декодер, а потом ещё и выстроятся в очередь друг за другом.
HoBorogHuu_nemyx 17.01.2019 21:26 # 0
HoBorogHuu_nemyx 17.01.2019 19:59 # 0
guest8 17.01.2019 20:03 # −999
gueest8 17.01.2019 20:13 # 0
WSL тоже не будет
Лососисис тунцов
Real x86-64 Linux may or may not handle int 0x80 even in 64-bit process. That depends CONFIG_IA32_EMULATION of kernel config.
WSL is not.
https://github.com/Microsoft/WSL/issues/3107
bormand 17.01.2019 20:14 # 0
bormand 17.01.2019 20:07 # 0
gueest8 17.01.2019 20:14 # 0
верно?
bormand 17.01.2019 20:16 # 0
guest8 17.01.2019 20:18 # −999
bormand 17.01.2019 20:18 # 0
guest8 17.01.2019 20:22 # −999
bormand 17.01.2019 20:23 # 0
gost 17.01.2019 20:31 # 0
У меня от дебага виндового «Heaven's Gate» до сих пор ночные кошмары.
guest8 17.01.2019 20:32 # −999
bormand 17.01.2019 20:34 # 0
gost 17.01.2019 20:34 # 0
bormand 17.01.2019 20:37 # 0
guest8 17.01.2019 20:38 # −999
guest8 17.01.2019 20:33 # −999
bormand 17.01.2019 20:39 # 0
guest8 17.01.2019 20:45 # −999
bormand 17.01.2019 21:16 # +1
guest8 17.01.2019 21:39 # −999
1024-- 17.01.2019 19:11 # 0
Неужели даже просто до O(n) с неважно какой константой оптимизация не доводит?
guest8 17.01.2019 19:14 # −999
HoBorogHuu_nemyx 17.01.2019 19:20 # 0
"Pascal": O(1). "C": O(n).
2. Кэширование границ итератора цикла "for".
"Pascal": есть. "C": нет, цикл реализован как обычный while.
guest8 17.01.2019 19:25 # −999
roman-kashitsyn 17.01.2019 19:22 # +3
1024-- 17.01.2019 19:36 # 0
Фу, середина - это всё ещё та же трудоёмкость. Квадратичное говно!
В оптимизированных версиях putchar '\0' ставят сразу в самое начало, и for (... strlen ...) даёт O(1), когда питушарское кэширование длины - O(n).
roman-kashitsyn 17.01.2019 20:06 # +1
Почему квадратичное? N×log(N)
rotoeb 22.10.2021 00:25 # 0
bormand 17.01.2019 20:12 # +4
guest8 17.01.2019 20:17 # −999
bormand 17.01.2019 20:17 # +2
HoBorogHuu_nemyx 17.01.2019 21:23 # +2
guest8 17.01.2019 21:53 # −999
HoBorogHuu_nemyx 17.01.2019 21:58 # +1
HoBorogHuu_nemyx 17.01.2019 22:13 # 0
И правда, Си предоставляет кучу способов прострелить себе колено.
bormand 26.09.2020 11:21 # +1
А ты юзай её правильно и всё будет норм.
Многие олдскульные функции из сишной либы тоже и на глобалки завязаны и строки портят.
gost 26.09.2020 11:26 # 0
gost 26.09.2020 11:26 # 0
bormand 26.09.2020 11:46 # +2
Ниже петху про break написал.
gost 26.09.2020 11:50 # +2
BJlADuMuPCKuu_nemxy 26.09.2020 11:53 # +2
https://govnokod.ru/4300#comment547526
gost 26.09.2020 11:57 # +2
BJlADuMuPCKuu_nemxy 26.09.2020 12:00 # 0
bormand 26.09.2020 12:17 # 0
PEKYPCuBHblu_yebok 26.09.2020 12:24 # 0
PEKYPCuBHblu_yebok 26.09.2020 12:24 # 0
PEKYPCuBHblu_yebok 26.09.2020 12:24 # 0
PEKYPCuBHblu_yebok 26.09.2020 12:24 # 0
PEKYPCuBHblu_yebok 26.09.2020 12:24 # 0
PEKYPCuBHblu_yebok 26.09.2020 12:24 # 0
bormand 26.09.2020 12:27 # +1
CHayT 26.09.2020 14:05 # +1
gost 26.09.2020 14:08 # +1
guest8 26.09.2020 14:20 # −999
rotoeb 26.09.2020 14:35 # 0
guest8 26.09.2020 15:30 # −999
OCETuHCKuu_nemyx 02.01.2020 16:09 # 0
bormand 02.01.2020 16:27 # 0
BJlADuMuPCKuu_nemxy 26.09.2020 11:12 # 0
ASD_77 18.01.2019 16:22 # +1
HoBorogHuu_nemyx 18.01.2019 17:32 # +1
guest8 18.01.2019 18:17 # −999
HoBorogHuu_nemyx 18.01.2019 18:33 # 0
–— А можно перепрограммировать контроллер 13-го прерывания?
Друг пытается понять, чего же от него хотят и что это за загадочный контроллер. Выдохнув, отвечает:
—– Ну, допустим, можно. А тебе это зачем нужно?
–— Винт отформатировать хочу! На низком уровне!
gueest8 18.01.2019 19:17 # 0
Вот на флопаре он работал, но можно было и без биоса обойтись: обычный format.com это делал (и высокоуровневое и низкоуровневое), иначе как бы им можно было сменить размер дискеты?
HoBorogHuu_nemyx 18.01.2019 23:05 # +1
В BIOS'ах конца 90-х была функция «Low Level Format», но на самом деле это была файка: она фактически тупо записывала нули во все логические блоки, т. е. это высокоуровневое форматирование, но без файловой системы.
На флопаре format.com выполнял не совсем низкоуровневое форматирование. Он не мог отформатировать сбойные дискеты или дискеты, которые до этого были неправильно отформатированы.
Настоящее низкоуровневое форматирование дискет выполняла программа «FDA» –— «floppy drive analyzer». Она умела читать межсекторные промежутки, записывать любые заголовки физических секторов. С помощью неё можно было отформатировать дискету не только для «IBM PC», но и для «ДВК», «Агата» –— вот этого всего зоопарка чудовищ. Вот эта программа могла творить чудеса.
guest8 18.01.2019 23:26 # −999
HoBorogHuu_nemyx 19.01.2019 00:02 # 0
Судя по каким баграм от иногда возникающей потери данных, так оно и есть.
guest8 19.01.2019 00:05 # −999
HoBorogHuu_nemyx 19.01.2019 00:09 # 0
guest8 19.01.2019 00:10 # −999
OCETuHCKuu_nemyx 02.01.2020 16:50 # 0
HoBorogHuu_nemyx 02.01.2020 16:54 # −1
AnalBoy 03.01.2020 00:35 # −1
bormand 22.10.2021 01:50 # 0
KaBauHblu_nemyx 17.01.2019 18:23 # +1
cykablyad 17.01.2019 18:24 # 0
KaBauHblu_nemyx 17.01.2019 18:26 # 0
Desktop 17.01.2019 18:26 # +1
KaBauHblu_nemyx 17.01.2019 19:51 # 0
guest8 17.01.2019 18:27 # −999
Goh 17.01.2019 19:05 # 0
HoBorogHuu_nemyx 17.01.2019 19:08 # 0