Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compiler construction 动态基本块与静态基本块和分支 在Smith and NAIR(57页)中的“虚拟机”中,描述了(在解释和动态二进制翻译的上下文中),动态基本块在中间有分支目标,而静态基本块没有。静态基本块只有一个入口和一个出口点,如图所示:_Compiler Construction_Virtual Machine_Interpreter - Fatal编程技术网

Compiler construction 动态基本块与静态基本块和分支 在Smith and NAIR(57页)中的“虚拟机”中,描述了(在解释和动态二进制翻译的上下文中),动态基本块在中间有分支目标,而静态基本块没有。静态基本块只有一个入口和一个出口点,如图所示:

Compiler construction 动态基本块与静态基本块和分支 在Smith and NAIR(57页)中的“虚拟机”中,描述了(在解释和动态二进制翻译的上下文中),动态基本块在中间有分支目标,而静态基本块没有。静态基本块只有一个入口和一个出口点,如图所示:,compiler-construction,virtual-machine,interpreter,Compiler Construction,Virtual Machine,Interpreter,现在,在那本书的第58页上,有人说当分支到达已经翻译的块的中间时,翻译过程会变得复杂。仿真管理器无法获取目标地址,因为它只有特定转换块的起始地址,而没有位于转换块中某个位置的分支目标。因此,即使源代码已经被翻译,也会再次被翻译。解决方案是使用额外的数据结构来跟踪每个转换块的地址范围。但是使用动态基本块时,不会出现这种明显的复杂情况。 但是,正如我们从上面所链接的图形和书籍所看到的,动态基本块在中间可以有分支目标,而静态块不具有这样的多个条目。那么,动态基本块如何代替静态块来解决这个问题呢 提前谢

现在,在那本书的第58页上,有人说当分支到达已经翻译的块的中间时,翻译过程会变得复杂。仿真管理器无法获取目标地址,因为它只有特定转换块的起始地址,而没有位于转换块中某个位置的分支目标。因此,即使源代码已经被翻译,也会再次被翻译。解决方案是使用额外的数据结构来跟踪每个转换块的地址范围。但是使用动态基本块时,不会出现这种明显的复杂情况。

但是,正如我们从上面所链接的图形和书籍所看到的,动态基本块在中间可以有分支目标,而静态块不具有这样的多个条目。那么,动态基本块如何代替静态块来解决这个问题呢

提前谢谢你


编辑:在上面链接的图中,在动态基本块中,有多个同名标签,即循环和跳过。那么,解释器如何确定哪个标签是实际目标呢?有可能在同一汇编代码部分中有多个同名标签吗?

据我所知,他们想用动态块结构解决的问题是,在进行翻译时,无法确定指令是否是分支目标,是否应该位于基本块的开头。标签通常在翻译后的指令流中不可见


其思想是,在执行过程中,当您落入或跳转到尚未翻译的地址时,您会将所有内容翻译到控制流中的下一个预期更改,即下一个分支。如果遇到跳转到已转换块的中间,最简单的方法是将其视为新的动态块。这将导致生成额外的代码,但通常这不是问题。

我没有也没有读过这本书,但在我看来,“动态基本块”是一个非常糟糕的术语,因为正如该部分所示,它根本不是基本块。它可能是动态的,但不是基本的。这就像说“纯巧克力冰淇淋”,其实它是巧克力和草莓的混合物。它可能是纯的,但不是巧克力。@torek我没给你弄到。“动态块根本不是基本块”是什么意思。你能解释一下吗?基本街区是一个有一个入口和一个出口的街区。他们似乎说:“我们翻译了一个块,称它为基本块,然后我们发现它不是基本块,所以现在我们在前面加上另一个词,而不是像我们应该的那样去掉形容词basic。”@torek谢谢。当块由实际控制流确定时,书籍作者正在调用块动态。动态块在分支或跳转指令之后立即开始,并在下一个分支或跳转指令结束,无论是否在该块中遇到跳转/分支目标。