Pull to refresh
235
Anton Fedorov@datacompboy

Программист / сисадмин (Sr. SRE)

0,1
Rating
298
Subscribers
Send message

Подозреваю, что тут зависит от -funsafe-math-optimizations именно из-за вопросов точности и допустимости фолдинга

И что вы хотите мне тут сказать?

Оба случая две двойки схлопнулись в одну четвёрку.

Я подозреваю, вы серьёзно так троллите... Но для читателей приведу пример: https://godbolt.org/z/E9ssr1n1c

Пять вариантов:

    num = num + 2 + 2;
    num = 2 + num + 2;
    num = num + 4;
    num += 4;
    num += 2 + 2;

Если с -O0 разница есть (по понятным причинам), на -O1 уже все компиляторы выдают одинаковый код для всех 5 выражений.

ну и, чтоб два раза не вставать, еще пример: https://godbolt.org/z/YPve5vK45

Опять же, уже на -O1 -- найдите, пожалуйста, разницу, между сгенерированным кодом, хотя на входе -- свич, иф, иф-елзе.

Мы тут про язык Си. Это НЕ машино-зависимая особенность.

"2" в тексте кода это литерал. "i+2" выражение оперирует идентификатором i, оператором + и литералом 2. Вы понимаете разницу между константой и литералом?

Расскажите, пожалуйста, как литералу стать константой.

Расскажите, пожалуйста, как литерал "2" превращается в "константы, в нестираемой памяти"

I/i это опечатка, телефон правит за меня.

Так вот, оптимизирующие компиляторы сделают все три одинаково. Потому что итог - и на 4 больше чем до. Побочных эффектов нет.

И компилятор может вообще заменить на константу, выбросив все и пересчитав в процессе.

А тупые компиляторы сделают вычисление 2+2 как отдельно в рантайме и только потом добавят...

До сих пор можно встретить компилятор, в которых

 i = i + 2 + 2;
 i = i + 4;
 i += 4;

Компилируются по разному. Вы считаете, что это разные вещи?

switch и if эквивалентны, и компиляторы имеют полное право это делать.

Да, там не использовали специально сборку, где оторвали только UI от защиты, оставив всю логику активной; там отрывали защиту от реальных сборок. Тесты слишком честные были.

Так уже были многократные тесты с и без защиты... Вполне себе доказали что тормозит и ышшо как

передачу данных невозможно перехватить извне, так как свет не распространяется за пределы помещения

В смысле, отражений не существует? :) Через окно не видно?

А в чем отличие от старого боброго IrDA?

еще полезно использовать:

void * O = malloc(1024*1024*8);
void * O0 = O;
void * o0 = O+75;
for(*(int*)(o0-71)=0777000;*(char*)(o0-72);*(char*)(o0-72)++) static oo += ++*(char*)(o0-70);

А чем вот это печатали? Интересный материал...

В смысле, Il1 ?

int I, l, II, Il, I1, l1, lI, ll;

Тоже хороший способ, да. но, к сожалению, `int i` это нормально :(

О, а вот это удобный вариант проводного коврика. Не то, что у SteelSeries

Я считаю что самым важным навыком для изучения это Oo0 паттерн. Что может быть лучше?

int o, O, oo, oO, o0, Oo, O0, OO;
for (o=oo; o<oO; o+=Oo) o0 += OO;

А это советская микросхема. У неё 16 ножек и 4 ручки, для переноски.

Тоже A4Tech NB-чтототам, но круглые были неудобные -- слишком маленькое поле

Information

Rating
4,007-th
Location
Zürich, Zürich, Швейцария
Date of birth
Registered
Activity

Specialization

Specialist
Ведущий