Глядя на код сборки («Отладка» »« Рабочий процесс отладки »» «Всегда показывать разборку») для оператора switch
, можно увидеть, что это O (1) (по крайней мере, в этом простом случае, внаименее).Например, вот код switch
:
![enter image description here](https://i.stack.imgur.com/1Pqr6.png)
Не заблудитесь в этом коде, но обратите внимание, что очень мало инструкций, которые устанавливаютсодержимое rdx
должно быть адресом кода, связанного с этим конкретным case
:
![enter image description here](https://i.stack.imgur.com/JP5Jl.png)
Подробности здесь не очень актуальны, но ключ в том, что в моем перечислении с 1000 делами оно не проходило 1000 проверок, а вычисляло адрес, вычисляя по индексу в этом перечислении, и просто переходило к соответствующему коду.
С учетом всего вышесказанного, перечисления обычно не имеют достаточно случаев, чтобы сложность оператора switch
была когда-либо наблюдаемой.И если бы у вас были тысячи (или миллионы) различных случаев, с кодом было бы так много других проблем, что сложность оператора switch была бы последней из ваших проблем, даже если бы это не было O (1).