问题标签 [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.
c - 更快地阅读关键字列表
我正在为通用编程语言编写一个简单的词法分析器,其中一种标记类型是“关键字”,它具有一些预定义的控制流标记,例如“if”、“else”、“while”、“return”。
我想知道使用 x86 Standard C 检查某个关键字是否在我的列表中的最快方法。
我的想法是使用跳转表,但 C 字符串比较是有问题的,因为 C 字符串是 char 类型的数组。
assembly - 短跳转偏移表使用
我正在尝试使用具有短跳转偏移的表:
Objdump 显示编码为ff 22
不是短跳转的跳转。
我还尝试根据我在这个问题中看到的内容jmp *r1(%edx)
跳转到标签+ 偏移量: On x86 assembly jump table,但是 gdb 显示这会将我带到内存中完全不同的地方。r1
另一个想法是手动读取eip
和添加偏移量,如this answer所示:
理想情况下,为了代码高尔夫的兴趣,解决方案尽可能短。那么如何在每个偏移量仅使用 1 个字节的情况下指定一个跳转表到附近的代码段?
c - C中的跳转表数组
我正在尝试优化对我制作的一些跳转表的访问,它们如下:
如您所见,这些函数用于在硬件级别访问 usart 外围设备,并按读/写/清除的顺序排列在表中。
我试图做的是有另一个跳转表的跳转表,这样我可以在启动时初始化所有usart的寄存器,或者如果需要,稍后只需更改单个寄存器。
IE
这样我可以将该表暴露给我的中间件层,这将有助于在更改 HAL 时保持标准,而且我可以使用定义来索引该表,即
正如您可能已经猜到的那样,我正在努力弄清楚如何构建这张表。我认为这是两件事之一:
另一个简单的指针数组,因为即使是跳转表本身也只是一个指针数组。因此我的初始化将是:
/li>
但是,这似乎不起作用。然后我想:
指向指针的指针数组。所以我尝试了各种组合:
/li>
似乎没有任何效果。在将该变量分配给指针到指针数组之前,我是否需要将较低跳转表的地址存储在另一个指针中?IE
在此先感谢,任何帮助将不胜感激。
MM25
编辑:
以上都给出了错误“从不兼容的指针类型初始化”,我尝试过的所有其他组合也是如此
assembly - 在汇编中使用 ds 和 [ ] 进行 jmp
您好,我想了解下面的这段代码,如果您能向我解释一下,我将不胜感激:
为什么使用这个“ds”和这个off_100011A4?以及下面的代码是什么意思:
data-structures - 控制表和跳转表的区别?
两者有什么区别?据我了解,它们都控制程序流程,第一个比后者定义更宽松,但除此之外我看不出两者的区别。
javascript - 为什么 JavaScript 没有为它的 switch 语句实现跳转表?
你好,我在一本书里读过这个,
case 表达式在运行时计算的事实使得 JavaScript switch 语句与 C、C++ 和 Java 的 switch 语句有很大不同(并且效率低于)。在那些语言中,case 表达式必须是相同类型的编译时常量,并且 switch 语句通常可以编译成高效的跳转表。
它指出 JS 的 switch 语句与 Java/C++ 不同,它的性能较低,并且知道这是因为它不像 Java/C++ 那样为 switch 语句实现跳转表。我想知道为什么 JS 没有实现 switch 语句的跳转表而 Java/C++ 做到了?这是因为 JS 是一种动态且弱的语言,还是因为它通常会被解释?如果那是因为它是一种解释性语言,那么 V8 引擎在编译 JS 时的情况如何。
c - C 和跳转表实现中的“本地”标签
我正在尝试在 C 中创建一个基于宏的跳转表。
这是一些示例代码:
可能的标签(I0、R0 等)必须相同。
问题是:我希望能够在同一源文件的不同范围部分中使用相同的宏。但是,编译器抱怨标签已定义。
我想要达到的目标:
有任何想法吗?任何可能的解决方法?
c - 如何在C中引用深度嵌套的函数指针数组?
我基本上有这个:
但是在运行时,我会遇到各种错误,例如:
我怎样才能让它工作?
做类似的事情((ExampleFn*)a[0])[0]();
会导致分段错误。
c++ - 在 gcc/clang (C++) 中获取函数范围之外的标签地址
我正在制作某种解释器,并且由于本地标签地址,我正在计算一个静态 const 跳转表。
你知道演习,
static const int JUMP_TABLE[] = { &&case0 - &&case0, &&case1 - &&case0
等等。
由于各种原因,主要是性能,我想在初始化期间将此表复制/压缩到一个对象中。
我的头撞墙了,因为我不知道如何逃避函数的词法范围!
我怎样才能以某种方式从另一个函数引用 &&case0 ?
有人对此有什么好办法吗?
提前致谢