将固定大小内存边界上的本机代码与GCC/G ++/AS对齐?

mcj*_*erz 4 c c++ gcc g++ memory-alignment

我有一个C函数,它包含将实现字节码解释器的字节码的所有代码.

我想知道是否有办法在固定大小边界的内存中对齐已编译代码的段,以便我可以直接计算从字节码的值跳转到的地址?排序与数组的工作方式相同,但不是从计算的地址读取,而是跳到它.

我知道我必须把代码放在每个"字节码代码"段的末尾执行下一个跳转,并且我必须使边界大小至少与最大段的大小一样大.

如果这是可能的,我怎么告诉编译器/汇编器(gcc/g ++/as)以这种方式对齐?

Vil*_*ari 7

我意识到这并不是你要求的,但这是用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)