-
- А зачем "узнавать"? Сегодня он одно оптимизирует, завтра обновился и поехало по другому. Или не поехало, поедет в следующем обновлении. Ташта, по нашей жизни, ставить скобки, в потенциально опасных местах и отрубать оптимизацию в "0". Такая вот mse homjak(19 знак., 12.11.2019 10:15)
- я давно перестал считать себя умнее компилятора, и если на -O0 оно работает, на -O3 нет, то вот 100% есть говнокод. хорошо замаскированный, и хрен его знает когда он выплывет. так что стоит добиваться полной работоспособности программы при -O3. в Mahagam(45 знак., 14.11.2019 11:56)
- +1 к "...и если на -O0 оно работает, на -O3 нет, то вот 100% есть говнокод". На практике убеждался не раз. Или не учёл аппаратный нюанс периферии, или намудрил с указателями или забыл модификатор volatile - всего не перечислишь. - Nikolay_Po(14.11.2019 21:30)
- У меня программа на -О1(других нету) работала-работала, а при переходе на следующую версию компилера, отработала. Причом, дохнет на обращениях к внешней памяти, которые были написаны-отлажены самыми первыми. Можно было остаться на старой, но там mse homjak(62 знак., 14.11.2019 13:26)
- Недоотлажены были, стало быть. Продолжать отладку до победного конца. - SciFi(14.11.2019 13:38)
- +1000! - PlainUser(14.11.2019 11:29)
- Существуют международные стандарты и ГОСТы определяющие необходимость расстановки скобок... поэтому достаточно выучить приоритет операций. И да, расстановка скобок не защищает от оптимизации. Компилятор оптимизирует дерево операций в целом, на fk0(24 знак., 12.11.2019 11:42)
- Это и печально mse homjak(288 знак., 12.11.2019 15:06)
- Не надо грязи. Ничего такого оптимизатор делать не будет. Откуда эта паранойя? Читайте книжки, там всё есть. - SciFi(12.11.2019 15:10, ссылка)
- Не... Я лучше шапочку из фольги... ;О) - mse homjak(12.11.2019 15:13)
- Шапочки явно недостаточно. Как минимум нужен ещё и бубен. - SciFi(12.11.2019 15:23, картинка)
- Не... Я лучше шапочку из фольги... ;О) - mse homjak(12.11.2019 15:13)
- Не надо грязи. Ничего такого оптимизатор делать не будет. Откуда эта паранойя? Читайте книжки, там всё есть. - SciFi(12.11.2019 15:10, ссылка)
- Бери выше. LTO видит всю программу. И время от времени попадается такое, что отползаешь и офигеваешь --> - SciFi(12.11.2019 11:45, ссылка)
- Только вот написал парсер строки формата (printf) времени компиляции. Который позволяет написать fprintf(file, "%d %s %f...", a, b, c...) И оно всё разворачивается (или сообщает об ошибке, если аргументы не соответствуют формату) в линейный код, fk0(1133 знак., 12.11.2019 12:21)
- А ведь можно было просто использовать fmtlib, которая целиком войдёт в следующую редакцию плюсов. - =AlexD=(12.11.2019 14:43, ссылка)
- Не знаю войдёт ли, сыровато и нормально не сделать без других не вошедших вещей. Смотри по ссылке: по факту compile time checks сработают только если включить некий C-макрос. А иначе вместо них runtime exception, что немного другая история, fk0(663 знак., 13.11.2019 00:45, ссылка)
- Не знаю на сколько оправданы твои труды, потому как GCC умеет сам проверять аргументы printf на соответствие шаблону целой кучей опций семейства -Wformat - =AlexD=(13.11.2019 06:04)
- Так рассуждать, труды автора fmtlib тоже не оправданы. Мол есть printf, он всё делает. Но это не так, очень даже оправданы. Там много ньюансов. Основной -- вынос парсинга строки формата в compile time, потому, что printf работает не быстро. По fk0(2963 знак., 13.11.2019 08:58 - 09:09, ссылка, картинка)
- Не знаю на сколько оправданы твои труды, потому как GCC умеет сам проверять аргументы printf на соответствие шаблону целой кучей опций семейства -Wformat - =AlexD=(13.11.2019 06:04)
- Не знаю войдёт ли, сыровато и нормально не сделать без других не вошедших вещей. Смотри по ссылке: по факту compile time checks сработают только если включить некий C-макрос. А иначе вместо них runtime exception, что немного другая история, fk0(663 знак., 13.11.2019 00:45, ссылка)
- А ведь можно было просто использовать fmtlib, которая целиком войдёт в следующую редакцию плюсов. - =AlexD=(12.11.2019 14:43, ссылка)
- Только вот написал парсер строки формата (printf) времени компиляции. Который позволяет написать fprintf(file, "%d %s %f...", a, b, c...) И оно всё разворачивается (или сообщает об ошибке, если аргументы не соответствуют формату) в линейный код, fk0(1133 знак., 12.11.2019 12:21)
- Это и печально mse homjak(288 знак., 12.11.2019 15:06)
- Наверное, я неинтересно код пишу. Ни разу не возникало необходимости "отрубать оптимизацию". - Сидоргек(12.11.2019 11:05)
- Можно пример, где реальные проблемы возникли? Даже интересно стало. - SciFi(12.11.2019 10:19)
- Да у меня, лично, ничо не было, потому как предохраняюсь, как могу и такие подозрительные места проверяю ручками. - mse homjak(12.11.2019 10:25)
- я давно перестал считать себя умнее компилятора, и если на -O0 оно работает, на -O3 нет, то вот 100% есть говнокод. хорошо замаскированный, и хрен его знает когда он выплывет. так что стоит добиваться полной работоспособности программы при -O3. в Mahagam(45 знак., 14.11.2019 11:56)
- Кому-то нравится из дизассемблера нос не высовывать, но лично я немного брезгую. Опять же, при желании порядок вычислений можно прибить гвоздями при помощи
лома и какой-то материvolatile. - SciFi(12.11.2019 09:40)
- А зачем "узнавать"? Сегодня он одно оптимизирует, завтра обновился и поехало по другому. Или не поехало, поедет в следующем обновлении. Ташта, по нашей жизни, ставить скобки, в потенциально опасных местах и отрубать оптимизацию в "0". Такая вот mse homjak(19 знак., 12.11.2019 10:15)