gpt4 book ai didi

c - GCC 返回优化

转载 作者:太空狗 更新时间:2023-10-29 11:22:03 27 4
gpt4 key购买 nike

我想知道GCC是否可以像这样优化代码

int foo(args) {
if(is_true) {
do_smth;
n = call_func(args);
do_smth;
return n;
}
else {
return call_func(args);
}
}

如果我在其他分支中,call_func 的调用将像没有 foo 调用一样执行?我正在编写内核模块,为了解决一个特定问题,我需要它看起来像是直接调用了这个 call_func。更具体地说,call_func 是一些系统调用。 Foo 是这个系统调用的我的版本。在 is_true 情况下我应该做 smth,调用这个系统调用然后返回它的返回值。但是在 !is_true 中,我想以某种方式更改调用堆栈本身——以便在当前级别上有 call_func 而不是 foo。有可能吗?

is_true 的实现:

struct task_struct * cur_task = current;
if(check_dir(cur_task)) {
...
}

check_dir 是检查我们是否要对目录做某事的函数,从中调用系统调用。

最佳答案

这叫做 tail-call优化(它在任何 C 标准中指定;相比之下,某些语言 - 例如 Scheme 和 Ocaml - 指定需要进行尾调用优化)。在一些案例中,最近GCC编译器可以做到这一点 optimization .

但这实际上取决于细节,特别是传递给 call_func

的实际参数

如果您依赖它,请注释您的代码并使用 gcc -fverbose-asm -O2 -S 检查您的编译器是否这样做。

请注意,此优化不是必需的,可能是编译器、编译标志、处理器和 ABI具体。

(所以它可以在 x86-64 上工作,但不能在 32 位 ia32 或 ARM 上工作;你真的应该检查一下!)

关于c - GCC 返回优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26868267/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com