c - 虚拟机查杀性能中的函数调用

标签 c performance function inline vm-implementation

我用 C 编写了一个虚拟机,它有一个调用表,其中包含指向提供 VM 操作码功能的函数的指针。当虚拟机运行时,它首先解释一个程序,为提供的操作码在调用表中创建一个对应于适当函数的索引数组。然后循环遍历数组,调用每个函数直到到达末尾。

每条指令都非常小,通常只有一行。非常适合内联。问题是编译器不知道何时将调用虚拟机的任何指令,因为它是在运行时决定的,因此无法内联它们。函数调用和参数传递的开销正在扼杀我的 VM 的性能。关于如何解决这个问题的任何想法?

最佳答案

以下是一些减少开销的选项:

  • 将函数声明为 fastcall (或类似的东西)以减少参数传递的开销
  • 使用大的 switch-case 而不是函数指针表(编译器将优化为跳转表,并消除实际调用函数的开销)
  • 将 VM 过程的所有代码复制到一个位置,以便它可以顺序运行,而不是在每条指令后返回到解释器。

  • 最终,您将进入 JIT 编译、在线分析和重新优化以及各种其他很棒的东西的地步。

    关于c - 虚拟机查杀性能中的函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4708250/

    相关文章:

    .net - 在(据称)高性能代码中使用 GetCurrentMethod

    php - 与 ISP 无关的速度测试

    javascript - 将 php 变量保存到函数中的脚本变量

    c - 在C中将指针分配给结构体时出现问题

    performance - CSS3 过渡性能 - 浏览器、操作系统和硬件建议?

    javascript - 为变量内的函数设置 boolean 值

    python - 暴露 __main__

    编译器对 make 文件发出错误提示

    c - Winsock 错误 1013 - 权限被拒绝

    c - pthread_join 阻止我的代码