БЕГЕМОТИКОВ МОЖНО! Войти !bnw Сегодня Клубы

как бороться с тем, что терминальные плейнсибляди больше двух слов скопировать не могут по равенству без memcpy?

// могут, но не хотят

#QRI373 / @ulidtko / 3901 день назад

бля, хотел сформулировать как-то покороче, получилось говно.
#QRI373/HEM / @ulidtko / 3901 день назад
@ulidtko ето
#QRI373/HYH / @238328 --> #QRI373/HEM / 3901 день назад
А в чём проблема?
#QRI373/BI6 / @fix / 3901 день назад
@fix в том что два слова быстрее при помощи mov копировать, а не вызовом memcpy
#QRI373/UBL / @hirthwork --> #QRI373/BI6 / 3901 день назад
@hirthwork gcc заинлайнил void foo(int *a, int *b) { memcpy(a, b, 2 * sizeof(int)); } выхлоп: foo: .LFB14: .cfi_startproc movq (%rsi), %rax movq %rax, (%rdi) ret .cfi_endproc
#QRI373/DWU / @fix --> #QRI373/UBL / 3901 день назад
@fix проблема в том, что мудаки массово пишут tsHujPizdaJigurdaData sPrevData; memcpy ( &sPrevData, &psInst->statData, sizeof(tsHujPizdaJigurdaData)); вместо tsHujPizdaJigurdaData sPrevData = psInsta->statData; — и я даже не трачу силы на расспросы какого хуя, все их аргументы и так сразу (мне) понятны
#QRI373/ED7 / @ulidtko --> #QRI373/BI6 / 3901 день назад
@fix а теперь `objdump -S` этой реализации: void foo(int *a, int *b) { *a = *b; *(a+1) = *(b+1); } // хуя ты `2 *` запрятал, я сразу-то и не заметил сходу!
#QRI373/1RC / @ulidtko --> #QRI373/DWU / 3901 день назад
@ulidtko это был `gcc -O3 -S`, а не objdump foo: .LFB14: .cfi_startproc movl (%rsi), %eax movl %eax, (%rdi) movl 4(%rsi), %eax movl %eax, 4(%rdi) ret .cfi_endproc // «два слова»
#QRI373/KR9 / @fix --> #QRI373/1RC / 3901 день назад
@fix нуооок // уау
#QRI373/0KT / @ulidtko --> #QRI373/KR9 / 3901 день назад
@fix бля надо ещё со структурой попробовать, а то *не то* получается
#QRI373/35X / @ulidtko --> #QRI373/KR9 / 3901 день назад
@ulidtko Интересно (на самом деле не очень-то), что быстрее: movl или movq? // байтоёбство literally
#QRI373/KZX / @fix --> #QRI373/35X / 3901 день назад
@fix воооот, а дефолтный `operator =` на структурах именно `memcpy` походу и делает: ``` test.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <_Z3fooR4TestRKS_>: struct Test { int x; int y; }; void foo(Test&a, const Test& b) { a = b; } 0: 48 8b 06 mov (%rsi),%rax 3: 48 89 07 mov %rax,(%rdi) 6: c3 retq 7: 66 0f 1f 84 00 00 00 nopw 0x0(%rax,%rax,1) e: 00 00 0000000000000010 <_Z4foo2R4TestRKS_>: __fortify_function void * __NTH (memcpy (void *__restrict __dest, const void *__restrict __src, size_t __len)) { return __builtin___memcpy_chk (__dest, __src, __len, __bos0 (__dest)); 10: 48 8b 06 mov (%rsi),%rax 13: 48 89 07 mov %rax,(%rdi) 16: c3 retq ``` // характерный, кстати, отсос с вылезшими в дебагинфо кишками билтина vs няшным чистым простым присваиванием
#QRI373/R5D / @ulidtko --> #QRI373/KR9 / 3901 день назад
@fix некорректный вопрос, потому что у них нет *собственной* (без контекста) скорости.
#QRI373/0CE / @ulidtko --> #QRI373/KZX / 3901 день назад
@ulidtko это из такого сорса: ``` #include <memory.h> struct Test { int a; int b; }; void foo(Test&a, const Test& b) { a = b; } void foo2(Test&a, const Test&b) { memcpy(&a, &b, sizeof(Test)); } ```
#QRI373/QYN / @ulidtko --> #QRI373/R5D / 3901 день назад
@ulidtko подразумевая, что если контекст влияет, то это войдёт в ответ на вопрос
#QRI373/OKK / @fix --> #QRI373/0CE / 3901 день назад
@hirthwork проблема в читабельности на самом деле // пока у меня от кода хуярят кровавые слёзы из глаз — ебал я в рот оптимизировать эти ваши байтики
#QRI373/SXF / @ulidtko --> #QRI373/UBL / 3901 день назад
@ulidtko это
#QRI373/YX7 / @fix --> #QRI373/SXF / 3901 день назад
@fix бля ну лень же
#QRI373/QIR / @ulidtko --> #QRI373/OKK / 3901 день назад
@ulidtko и мне
#QRI373/OTM / @fix --> #QRI373/QIR / 3901 день назад
@ulidtko > nopw моя история
#QRI373/ZQD / @kb --> #QRI373/R5D / 3901 день назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.