带有链接时代码生成的 MSVC 能否跨 C 和 C++ 进行优化?

Posted

技术标签:

【中文标题】带有链接时代码生成的 MSVC 能否跨 C 和 C++ 进行优化?【英文标题】:Can MSVC with link-time codegen optimize across C and C++? 【发布时间】:2017-12-30 03:57:46 【问题描述】:

如果link-time code generation (LTCG) 与 MSVC 一起使用,是否可以跨 C 和 C++ 语言边界优化代码?

例如,可以将 C 函数内联到 C++ 调用程序中吗?

【问题讨论】:

灵感来自***.com/a/48030595/841108 我对在几分钟内提出 4 个非常相关的问题感到不舒服。 (包括这个的完整集是:***.com/questions/48030795、***.com/questions/48030786、***.com/questions/48030706、***.com/questions/48030818)。我不禁觉得,关于 4 个编译器中的哪一个可以做到这一点的一个问题会更好。这感觉就像一个“rep grubbing”策略。也许这很苛刻,但是…… 【参考方案1】:

是的,我刚刚尝试过:

int foo()  return 5; 

在 .c 文件中并且:

extern "C" int foo();
printf("%d\r\n", foo());

在 .cpp 中,反汇编是:

00007FF60F6F3935  mov         edx,5  
00007FF60F6F393A  lea         rcx,[string "%d" (07FF60F727FB4h)]  
00007FF60F6F3941  call        printf (07FF60F701E00h)  

【讨论】:

以上是关于带有链接时代码生成的 MSVC 能否跨 C 和 C++ 进行优化?的主要内容,如果未能解决你的问题,请参考以下文章

可以跨 C 和 C++ 方法优化 gcc 或 clang 的 LTO

如何在 MSVC 中创建 WT 项目?

从 C++ 调用 C# dll(MSVC 编译器)

跨不同编译器的C ++库

带有 MSVC++ 2012 的 Unicode

从 MSVC 输出生成 Makefile 依赖项