在 C 中完全删除运行时的函数调用

标签 c linux

是否可以在运行时从 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/

相关文章:

c++ - 查找二进制到 C/C++ 的链接

c - malloc 没有正确分配 3d 数组

linux - 如何使 httpd 与两个不同版本的 openssl 一起工作

linux - 允许特定供应商拇指驱动器的 udev 规则是什么?

linux - 如何通过sysfs访问设备?

c - 简单的 C 函数的奇怪行为

c - 字符串末尾的 "$"标记是否有特殊含义?

c - Ncurses:刷新非重叠窗口会刷新整个屏幕。如何避免这种情况?

linux - 如何在 Linux 中的列内换行

c - 信号问题,定时器(SIGEV_SIGNAL)