问题标签 [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.

0 投票
9 回答
6125 浏览

java - Java中有没有类似分支/跳转表的东西?

Java是否有类似于分支或跳转表的东西?

根据维基百科,分支或跳转表是

一个术语,用于描述使用分支指令表将程序控制(分支)转移到程序的另一部分(或可能已动态加载的不同程序)的有效方法。

Java 是否有类似的东西,还是我只需要使用 if/else if/else 或 case 语句?

0 投票
11 回答
11217 浏览

c++ - 如何将 goto 标签存储在数组中,然后跳转到它们?

我想声明一个“跳转标签”数组。

然后我想跳转到这个数组中的一个“跳转标签”。

但我不知道如何做到这一点。

它应该类似于以下代码:

有谁知道如何执行此操作?

0 投票
2 回答
3976 浏览

c++ - Switch-Case:声明和初始化 & 声明然后赋值

在 switch-case 语句中,声明与初始化是无效的,但允许声明然后赋值。如以下代码片段所示。

从编译器端看,这两种类型的初始化有什么区别?以及为什么第一种类型的初始化无效而第二种类型的初始化有效。

0 投票
7 回答
1980 浏览

c++ - “默认”开关盒是否会干扰跳转表优化?

在我的代码中,我习惯于编写包含如下断言的回退默认案例,以防止我在语义发生变化时忘记更新开关

现在我想知道人工回退检查默认情况是否会干扰跳转表生成?想象一下“ModeA”和“ModeB”等是连续的,因此编译器可以优化成一个表。由于“默认”案例包含一个实际的“返回”语句(因为断言将在发布模式下消失并且编译器会抱怨缺少的返回语句),编译器似乎不太可能优化默认分支。

处理这个问题的最佳方法是什么?一些朋友建议我将“ADummyValue”替换为空指针取消引用,以便编译器在存在未定义行为时可以省略对缺少返回语句的警告。有没有更好的方法来解决这个问题?

0 投票
3 回答
2153 浏览

c - 在 C 中使用 x86 样式的跳转表

我正在尝试像这样在C中做一个跳转表

等等

我从这个开始

但它工作不顺利..

0 投票
12 回答
64198 浏览

c - “switch”比“if”快吗?

switch语句实际上比语句快吗if

/Ox我在带有标志的 Visual Studio 2010 的 x64 C++ 编译器上运行了以下代码:

并得到了这些结果:

Switch 语句:5261 毫秒
If 语句:5196 毫秒

据我所知,switch语句显然使用跳转表来优化分支。

问题:

  1. 在 x86 或 x64 中,基本的跳转表会是什么样子?

  2. 此代码是否使用跳转表?

  3. 为什么在这个例子中没有性能差异?是否存在显着性能差异的情况?


反汇编代码:



更新:

有趣的结果在这里。不过,不知道为什么一个更快,一个更慢。

0 投票
3 回答
17722 浏览

c - C中的跳转表示例

请给我一些跳转表用法的例子。我在维基百科上看过这个例子:

但是我想知道是否有另一种调用函数而不是使用索引的替代方法,在上面的例子中是jump_table[value]();

我想要实现的是,有一种方法可以使用函数本身的名称,而不是使用索引。

例如,假设我们在一个结构中拥有所有函数指针。

现在当我想调用该函数时,我可以做类似的事情funcptrs.func1()吗?

0 投票
1 回答
324 浏览

assembly - 如何动态地将分支目标提示到 x64 CPU?

我想知道如何用 C、C++ 或汇编语言为 x64 处理器编写高效的跳转表。输入是预先知道的,但无法通过算法进行预测。假设我可以在输入流中尽可能地向前看,有什么方法可以动态地告诉 CPU 下一个分支要去哪个地址?

本质上,我想以编程方式更新分支目标缓冲区。但是,如果程序员通过查看数据提前知道下一个分支的去向,但处理器无法从过去的模式中确定这一点,我会接受任何允许我避免刷新管道的方法。

意识到这是一个非常具体的问题,我可能无法正确传达它,这里有一些替代措辞:

Cell 处理器上是否有与hbrHint for Branch 等效的 x64?

它是否有助于在cmp条件分支之前移动程序集,就像在 Itanium 中所做的那样?

间接跳转的预测目标是否基于寄存器值而不是最后使用的地址?

谢谢!

0 投票
2 回答
8188 浏览

c++ - c 切换和跳转表

据我了解,c/c++ 中的 switch 语句有时会编译为跳转表。我的问题是,是否有任何经验法则可以确保这一点?

就我而言,我正在做这样的事情:

我按顺序涵盖了从 1 到 n 的所有情况。可以安全地假设它将编译为跳转表吗?原始代码是一个冗长而凌乱的if else语句,所以至少我获得了一些可读性。

0 投票
1 回答
270 浏览

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?