【发布时间】:2013-09-28 21:37:22
【问题描述】:
我一直在使用 Valgrind 进行一些测试,以了解编译器如何翻译函数,并发现有时,由于未内联,与编写在同一源文件中的函数相比,编写在不同文件上的函数性能较差。
考虑到我有不同的文件,每个文件都包含与特定区域相关的函数,并且所有文件共享一个声明所有函数的公共标题,这是预期的吗?
为什么当它们写在不同的文件上时编译器不内联它们而当它们在同一个页面上时呢?
如果这种行为开始导致性能问题,建议采取什么措施,在编译之前手动将所有函数放在同一个文件中?
示例:
//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
对于更大的功能,它不那么明显,但仍然会发生。
【问题讨论】:
标签: c function compilation inline