gpt4 book ai didi

c++ - 函数所需的堆栈空间会影响 C/C++ 中的内联决策吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:12:28 25 4
gpt4 key购买 nike

函数所需的大量堆栈空间会阻止它被内联吗?例如,如果我在堆栈上有一个 10k 的自动缓冲区,是否会降低函数被内联的可能性?

int inlineme(int args) {
char svar[10000];

return stringyfunc(args, svar);
}

我更关心 gcc,但 icc 和 llvm 也很高兴知道。

我知道这并不理想,但我很好奇。代码在缓存上也可能很糟糕。

最佳答案

是的,内联与否取决于函数的复杂性、堆栈和寄存器的使用情况以及进行调用的上下文。这些规则依赖于编译器和目标平台。当性能很重要时,请始终检查生成的程序集。

比较 this version内联 10000 个字符的数组(GCC 8.2、x64、-O2):

inline int inlineme(int args) {
char svar[10000];

return stringyfunc(args, svar);
}

int test(int x) {
return inlineme(x);
}

生成的程序集:

inlineme(int):
sub rsp, 10008
mov rsi, rsp
call stringyfunc(int, char*)
add rsp, 10008
ret
test(int):
jmp inlineme(int)

this one使用一个小得多的 10 字符数组,内联的:

inline int inlineme(int args) {
char svar[10];

return stringyfunc(args, svar);
}

int test(int x) {
return inlineme(x);
}

生成的程序集:

test(int):
sub rsp, 24
lea rsi, [rsp+6]
call stringyfunc(int, char*)
add rsp, 24
ret

关于c++ - 函数所需的堆栈空间会影响 C/C++ 中的内联决策吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54694380/

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