问题标签 [jump-table]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java中有没有类似分支/跳转表的东西?
Java是否有类似于分支或跳转表的东西?
根据维基百科,分支或跳转表是
一个术语,用于描述使用分支指令表将程序控制(分支)转移到程序的另一部分(或可能已动态加载的不同程序)的有效方法。
Java 是否有类似的东西,还是我只需要使用 if/else if/else 或 case 语句?
c++ - 如何将 goto 标签存储在数组中,然后跳转到它们?
我想声明一个“跳转标签”数组。
然后我想跳转到这个数组中的一个“跳转标签”。
但我不知道如何做到这一点。
它应该类似于以下代码:
有谁知道如何执行此操作?
c++ - Switch-Case:声明和初始化 & 声明然后赋值
在 switch-case 语句中,声明与初始化是无效的,但允许声明然后赋值。如以下代码片段所示。
从编译器端看,这两种类型的初始化有什么区别?以及为什么第一种类型的初始化无效而第二种类型的初始化有效。
c++ - “默认”开关盒是否会干扰跳转表优化?
在我的代码中,我习惯于编写包含如下断言的回退默认案例,以防止我在语义发生变化时忘记更新开关
现在我想知道人工回退检查默认情况是否会干扰跳转表生成?想象一下“ModeA”和“ModeB”等是连续的,因此编译器可以优化成一个表。由于“默认”案例包含一个实际的“返回”语句(因为断言将在发布模式下消失并且编译器会抱怨缺少的返回语句),编译器似乎不太可能优化默认分支。
处理这个问题的最佳方法是什么?一些朋友建议我将“ADummyValue”替换为空指针取消引用,以便编译器在存在未定义行为时可以省略对缺少返回语句的警告。有没有更好的方法来解决这个问题?
c - 在 C 中使用 x86 样式的跳转表
我正在尝试像这样在C中做一个跳转表
等等
我从这个开始
但它工作不顺利..
c - “switch”比“if”快吗?
switch
语句实际上比语句快吗if
?
/Ox
我在带有标志的 Visual Studio 2010 的 x64 C++ 编译器上运行了以下代码:
并得到了这些结果:
Switch 语句:5261 毫秒
If 语句:5196 毫秒
据我所知,switch
语句显然使用跳转表来优化分支。
问题:
在 x86 或 x64 中,基本的跳转表会是什么样子?
此代码是否使用跳转表?
为什么在这个例子中没有性能差异?是否存在显着性能差异的情况?
反汇编代码:
更新:
有趣的结果在这里。不过,不知道为什么一个更快,一个更慢。
c - C中的跳转表示例
请给我一些跳转表用法的例子。我在维基百科上看过这个例子:
但是我想知道是否有另一种调用函数而不是使用索引的替代方法,在上面的例子中是jump_table[value]();
我想要实现的是,有一种方法可以使用函数本身的名称,而不是使用索引。
例如,假设我们在一个结构中拥有所有函数指针。
现在当我想调用该函数时,我可以做类似的事情funcptrs.func1()
吗?
assembly - 如何动态地将分支目标提示到 x64 CPU?
我想知道如何用 C、C++ 或汇编语言为 x64 处理器编写高效的跳转表。输入是预先知道的,但无法通过算法进行预测。假设我可以在输入流中尽可能地向前看,有什么方法可以动态地告诉 CPU 下一个分支要去哪个地址?
本质上,我想以编程方式更新分支目标缓冲区。但是,如果程序员通过查看数据提前知道下一个分支的去向,但处理器无法从过去的模式中确定这一点,我会接受任何允许我避免刷新管道的方法。
意识到这是一个非常具体的问题,我可能无法正确传达它,这里有一些替代措辞:
Cell 处理器上是否有与hbr
Hint for Branch 等效的 x64?
它是否有助于在cmp
条件分支之前移动程序集,就像在 Itanium 中所做的那样?
间接跳转的预测目标是否基于寄存器值而不是最后使用的地址?
谢谢!
c++ - c 切换和跳转表
据我了解,c/c++ 中的 switch 语句有时会编译为跳转表。我的问题是,是否有任何经验法则可以确保这一点?
就我而言,我正在做这样的事情:
我按顺序涵盖了从 1 到 n 的所有情况。可以安全地假设它将编译为跳转表吗?原始代码是一个冗长而凌乱的if else
语句,所以至少我获得了一些可读性。
c - jump table & code pointers
My code looks like this: (n is a number among 0,1,2 and 3, and loc_A/B/C/D each represents a block of code)
What does "&&loc_A" stands for? Is it the address(or location) of the codes which loc_A represents?