gpt4 book ai didi

c - 为什么编译器不内联写在不同源文件上的函数?

转载 作者:太空宇宙 更新时间:2023-11-03 23:29:34 25 4
gpt4 key购买 nike

我一直在使用 Valgrind 进行一些测试,以了解编译器如何翻译函数,并且发现,有时,由于未内联,写在不同文件上的函数与写在同一源文件上的函数相比表现不佳。

考虑到我有不同的文件,每个文件都包含与特定区域相关的函数,并且所有文件共享一个声明所有函数的公共(public) header ,这是预期的吗?

为什么当它们写在不同的文件上时编译器不内联它们,而当它们在同一页上时编译器会内联它们?

如果此行为开始导致性能问题,建议的操作过程是什么,在编译之前手动将所有函数放在同一个文件中?

例子:

//source 1
void foo(char *str1, char *str2)
{
//here goes the code
}

//source 2
void *bar(int something, char *somethingElse)
{
//bar code
foo(variableInsideBar, anotherVariableCreatedInsideBar);
return variableInsideBar;
}

示例性能成本:

在不同的文件上:29920

两者在同一个文件上:8704

对于更大的函数,它没有那么明显,但仍然会发生。

最佳答案

如果您正在使用 gcc,您应该尝试选项 -combine-fwhole-program 并将所有源文件传递给编译器在一次调用中。传统上不同的 C 文件是分开编译的,但优化交叉编译单元(文件)变得越来越普遍。

关于c - 为什么编译器不内联写在不同源文件上的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19071933/

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