Size: a a a

2021 March 01

K

Kirill in supapro.cxx
Грубо говоря у case сложность O(1), а у if - O(n), где n - количество этих самых ифов
источник

DP

Denis Paukaev in supapro.cxx
test_case(int):
       xor     eax, eax
       cmp     edi, 9
       ja      .L8
       mov     edi, edi
       mov     eax, DWORD PTR CSWTCH.22[0+rdi*4]
.L8:
       ret
test_if(int):
       xor     eax, eax
       cmp     edi, 9
       ja      .L11
       mov     edi, edi
       mov     eax, DWORD PTR CSWTCH.22[0+rdi*4]
.L11:
       ret
источник

DP

Denis Paukaev in supapro.cxx
где же тут O(n)
источник

K

Kirill in supapro.cxx
Эт -O3 оптимизировал. Убери его - увидишь кучу cmp/jne
источник

FS

Flower Surgeon in supapro.cxx
Kirill
Его не надо обманывать. Вот твой же пример, но с чуть большим количеством case-statement'ов
https://godbolt.org/z/xjv5jK
И что поменялось от количества ифов?
источник

DP

Denis Paukaev in supapro.cxx
зачем мне его убирать, понятно что без оптимизации тебе дословно компилируют то что написано
источник

DP

Denis Paukaev in supapro.cxx
с другой стороны измерять скорость сборок без оптимизации это интересный вид извращения
источник

K

Kirill in supapro.cxx
Denis Paukaev
зачем мне его убирать, понятно что без оптимизации тебе дословно компилируют то что написано
Оптимизатор не всегда сможет оптимизировать. А в случае с case ты будешь на 100% уверен, что скомпилится именно то что тебе нужно
источник

DP

Denis Paukaev in supapro.cxx
можно сразу ещё и дебаг включить
источник

K

Kirill in supapro.cxx
Это как полагаться на inline когда хочешь заинлайнить, короче ни о чём
источник

DP

Denis Paukaev in supapro.cxx
Kirill
Оптимизатор не всегда сможет оптимизировать. А в случае с case ты будешь на 100% уверен, что скомпилится именно то что тебе нужно
ни в чем ты уверен быть не можешь, C++ тебе никаких гарантий про case не даёт
источник

AS

Anatoly Shirokov in supapro.cxx
Denis Paukaev
ни в чем ты уверен быть не можешь, C++ тебе никаких гарантий про case не даёт
Но дефакто все оптимизируют switch, получают либо O(1), либо O(log N)
источник

DP

Denis Paukaev in supapro.cxx
ну с ифами вон тоже оптимизируют )
источник

DP

Denis Paukaev in supapro.cxx
я же не призываю в таких случаях писать If вместо case
источник

FS

Flower Surgeon in supapro.cxx
Было время, когда я куски кода переписывал на ассемблере, чтобы влезть в память загрузчика у микроконтроллера.
источник

Е

Егор in supapro.cxx
Anatoly Shirokov
Но дефакто все оптимизируют switch, получают либо O(1), либо O(log N)
а o(1) как? В хеш мапу суют?
источник

K

Kirill in supapro.cxx
Егор
а o(1) как? В хеш мапу суют?
Да
источник

FS

Flower Surgeon in supapro.cxx
А потом мои коллеги просто выкинули GCC, взяв IAR, и все мои труды накрылись тазом.
источник

FS

Flower Surgeon in supapro.cxx
T__T
источник

Е

Егор in supapro.cxx
тогда странно что свитч только для целочисленных переменных можно юзать
источник