是否可以在运行时从 C 代码中完全删除函数调用,并在需要时将其插入。
我不确定是否可以在运行时修改 ELF,以便在不使用函数的情况下不会浪费 cpu 周期。
我不想在函数调用之前放置“if”检查以避免调用函数。
例如,如果全局标志 g_flg=1 那么 func1 应该如下所示
void func1(int x)
{
/* some processing */
func2(y);
/* some processing */
}
如果 global g_flag=0 那么 func1 应该如下所示
void func1(int x)
{
/* some processing */
/* some processing */
}
最佳答案
不要优化不需要它的东西。您是否尝试过评估对您的绩效的潜在改进?
尝试将 g_flg 设置为 1 并执行此操作:
if (g_flg == 1) {func2(y);}
然后尝试执行这个:
func2(y);
两者都是 100 万次(或者您可以在合理时间内运行它的任何次数)。我敢肯定,您会注意到这两者之间几乎没有区别。
另外,除此之外,我认为你想做的事情是不可能的,因为 ELF 是一种二进制(编译)格式。
关于在 C 中完全删除运行时的函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12691394/