mcj*_*erz 4 c c++ gcc g++ memory-alignment
我有一个C函数,它包含将实现字节码解释器的字节码的所有代码.
我想知道是否有办法在固定大小边界的内存中对齐已编译代码的段,以便我可以直接计算从字节码的值跳转到的地址?排序与数组的工作方式相同,但不是从计算的地址读取,而是跳到它.
我知道我必须把代码放在每个"字节码代码"段的末尾执行下一个跳转,并且我必须使边界大小至少与最大段的大小一样大.
如果这是可能的,我怎么告诉编译器/汇编器(gcc/g ++/as)以这种方式对齐?
我意识到这并不是你要求的,但这是用GCC实现字节码解释器的标准方法.
GCC的"计算goto"或"标签值"功能允许您将标签放入数组中并有效地跳转到不同的字节码指令.请参阅使用gcc的计算goto快速解释器.另请参阅此相关的Stack Overflow问题:C/C++ goto,以及标签上的GCC文档作为值.
执行此操作的代码如下所示:
void* jumptable[] = {&&label1, &&label2};
label:
/* Code here... */
label2:
/* Other code here... */
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用该表跳转到不同的说明:
goto *jumptable[i];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1189 次 |
| 最近记录: |