teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記

2019/11/24 00:35

投稿

asm
asm

スコア15149

answer CHANGED
@@ -3,4 +3,14 @@
3
3
  コンパイラの最適化によってswitch文がテーブルジャンプに最適化されることは割とあります。
4
4
  C#も[SWITCH](https://docs.microsoft.com/ja-jp/dotnet/api/system.reflection.emit.opcodes.switch?view=netframework-4.8)命令によるジャンプテーブルになる場合があります。
5
5
 
6
- [適当に調べたところ](https://sharplab.io/#v2:EYLgHgbALANALiAlgGwD4AEBMBGAsAKHQGYACLEgYRIG8CT6zTEA7OEgWQAoW3EBKGnQbCAzgHdEcAMYALbn1r5hyhlICGIgKYkADCDIB2EpgDcQlcPVaS2feiNEzSi5Y3bMdo1CcvhAej8SK20iTxJvc18AoLdwsIBWH196aOCSeLCIJOTU2Igwg2yowLSDMIBOIpcAE00AMzUAV2QEQxIAWmwqhgBfSL78HqA=)3分岐以上ではジャンプテーブルを使うようです。
6
+ [適当に調べたところ](https://sharplab.io/#v2:EYLgHgbALANALiAlgGwD4AEBMBGAsAKHQGYACLEgYRIG8CT6zTEA7OEgWQAoW3EBKGnQbCAzgHdEcAMYALbn1r5hyhlICGIgKYkADCDIB2EpgDcQlcPVaS2feiNEzSi5Y3bMdo1CcvhAej8SK20iTxJvc18AoLdwsIBWH196aOCSeLCIJOTU2Igwg2yowLSDMIBOIpcAE00AMzUAV2QEQxIAWmwqhgBfSL78HqA=)3分岐以上ではジャンプテーブルを使うようです。
7
+
8
+
9
+ ---
10
+
11
+ **追記**
12
+ ついでにgccによるC言語の場合[さらに簡潔になり](https://godbolt.org/z/jXm2eR)ジャンプがなくなります。
13
+ 基本的にこのレベルの**コンパイラができる最適化**は人間がやる理由がありません。
14
+ 古い・もしくは最適化しないコンパイラを使わざるを得ない時、計測の結果、性能が足りない時に行う最後の手段です。
15
+
16
+ C#が動く時点で、そんな曲芸が必要な環境はほぼ皆無だと思います。