在C中运行时"内联"(种类)函数

for*_*ran 5 c lisp jit inline metaprogramming

我正在考虑一个非常JIT能够解决的典型问题,但很难用原始C进行处理.该场景设置了一系列函数指针,这些指针在运行时将被"组合"(如在数学函数组合中)然后很多次打电话.

以明显的方式执行它涉及许多虚拟调用,这是昂贵的,并且如果有足够的嵌套函数来完全填充CPU分支预测表,那么性能会大幅下降.

在像Lisp这样的语言中,我可以处理代码并用函数的实际内容替换"虚拟"调用,然后调用compile以获得优化版本,但这似乎非常hacky并且在C中容易出错,并且使用C是这个问题的要求;-)

那么,你知道在C中是否有标准,便携和安全的方法来实现这一目标吗?

干杯

wum*_*ump 6

您可能希望查看LLVM.他们有一个允许来自C的JITing代码(以及更多东西)的库,它支持许多平台,它是一个开源项目:http://llvm.org/