一般来说,它们是相同的,不包括内联或其他全局优化机会。但根据架构的不同,可能会有细微的差异。
例如,在Linux/Unix中,问题不在于不同CU的函数之间,而在于您调用的函数是否具有外部链接:
void foo() {}
void bar()
{ foo(); }
Run Code Online (Sandbox Code Playgroud)
或者:
static void foo() {}
void bar()
{ foo(); }
Run Code Online (Sandbox Code Playgroud)
如果此代码被编译为共享对象(但不是可执行文件!),则外部共享对象可能会被另一个共享对象(例如foo()通过)覆盖,但静态共享对象不能。LD_LIBRARY_PRELOAD因此,即使来自同一 CU,对共享对象内的外部函数的调用也必须使用可重定位跳转来完成。
然而,在 Windows 中,没有 之类的东西LD_LIBRARY_PRELOAD,因此没有这样的区别。