Size: a a a

2020 November 01

EZ

Evgenii Zheltonozhsk... in pro.cxx
Konstantin
Сравнение с нулем быстрее происходит
meh
источник

DY

Dan Y in pro.cxx
Konstantin
Сравнение с нулем быстрее происходит
жесть
источник

D

Danya in pro.cxx
Konstantin
Сравнение с нулем быстрее происходит
Чем отсутствие сравнения?
источник

DY

Dan Y in pro.cxx
теперь становится понятнее
источник

K

Konstantin in pro.cxx
Danya
Чем отсутствие сравнения?
Ну вообще, если оставить просто if(condition), то он будет сравнивать condition с 1(true), но большинство компьютеров так устроены, что все в них - сравнение с нулем) То есть сначала надо вычесть из true true, и если это значение равно 0, то все ок, а при сравнении сразу с нулем, компьютер не будет ничего вычитать
источник

EZ

Evgenii Zheltonozhsk... in pro.cxx
Konstantin
Ну вообще, если оставить просто if(condition), то он будет сравнивать condition с 1(true), но большинство компьютеров так устроены, что все в них - сравнение с нулем) То есть сначала надо вычесть из true true, и если это значение равно 0, то все ок, а при сравнении сразу с нулем, компьютер не будет ничего вычитать
источник

АК

Александр Караев... in pro.cxx
Konstantin
Ну вообще, если оставить просто if(condition), то он будет сравнивать condition с 1(true), но большинство компьютеров так устроены, что все в них - сравнение с нулем) То есть сначала надо вычесть из true true, и если это значение равно 0, то все ок, а при сравнении сразу с нулем, компьютер не будет ничего вычитать
/voteban
источник

K

Konstantin in pro.cxx
/voteban
источник

D

Danya in pro.cxx
Konstantin
Ну вообще, если оставить просто if(condition), то он будет сравнивать condition с 1(true), но большинство компьютеров так устроены, что все в них - сравнение с нулем) То есть сначала надо вычесть из true true, и если это значение равно 0, то все ок, а при сравнении сразу с нулем, компьютер не будет ничего вычитать
Это задача компилятора — оптимизировать, а не статического анализатора предлагать трансформации кода для микрооптимизаций под конкретное железо
источник

IB

Igor B. in pro.cxx
Коллеги привет, а не дадите ссылок на какие-нибудь статьи (не hello world уровня), где доступно с примерами (очень желательно) объясняется как правильно анализировать диагностическую информацию от Address Sanitizer'а.
источник

DY

Dan Y in pro.cxx
Konstantin
Ну вообще, если оставить просто if(condition), то он будет сравнивать condition с 1(true), но большинство компьютеров так устроены, что все в них - сравнение с нулем) То есть сначала надо вычесть из true true, и если это значение равно 0, то все ок, а при сравнении сразу с нулем, компьютер не будет ничего вычитать
ок, мы имеем if ( condition != 0), сравнили с нулем, получили if (0), он потом же все равно должен сравнить 0 с true?
источник

DY

Dan Y in pro.cxx
если у нас condition == 0
источник

K

Konstantin in pro.cxx
Это уже оптимизируется другим образом. Если писать на assembler, то после команды сравнения cmp идет некое подобие jmp(можно сказать переход к функции). там есть je - если условие верно и jne - если условие неверно. Это всего одна комманда на машинном коде. Компилятору лишь остается выбрать, что из этого использовать для лучшей оптимизации
источник

K

Konstantin in pro.cxx
не уверен, что понятно объяснил
источник

K

Konstantin in pro.cxx
источник

DY

Dan Y in pro.cxx
ага, ну я в целом понял, спасибо)
источник

K

Konstantin in pro.cxx
На самом деле, если пишеш под полноценный ПК, то вообще не парься. Это чисто для Микроконтроллеров такая фигня имеет хоть какое-то значение
источник

DY

Dan Y in pro.cxx
это код PostgreSQL, видимо там чуваки заморачиваются
источник

m

magras in pro.cxx
Konstantin
На самом деле, если пишеш под полноценный ПК, то вообще не парься. Это чисто для Микроконтроллеров такая фигня имеет хоть какое-то значение
Пожалуйста не занимайтесь дезинформацией.

Во-первых, true равен единице при конвертации bool в int. Но при конвертации int в bool true - это любое ненулевое значение.

Во-вторых, вам абсолютно правильно указали на то что bool_expr != 0 на неоптимизирующем компиляторе строго хуже просто bool_expr. Оптимизирующему компилятору все равно, он сможет выкинуть лишнюю операцию, которую вы добавили.
источник

K

Konstantin in pro.cxx
magras
Пожалуйста не занимайтесь дезинформацией.

Во-первых, true равен единице при конвертации bool в int. Но при конвертации int в bool true - это любое ненулевое значение.

Во-вторых, вам абсолютно правильно указали на то что bool_expr != 0 на неоптимизирующем компиляторе строго хуже просто bool_expr. Оптимизирующему компилятору все равно, он сможет выкинуть лишнюю операцию, которую вы добавили.
Ну с конвертацией bool<->int не спорю
источник