关于函数级链接

关于函数级链接

Visual C++ 编译器选项/Gy会启用函数级链接。

此选项允许编译器以封装函数 (COMDAT) 的形式将各个函数打包。

 

链接器要求单独打包为 COMDAT 的函数在 DLL 或 .exe 文件中排除或安排各个函数。

可以使用链接器选项 /OPT(优化) 从 .exe 文件中排除未引用的封装函数。

可以使用链接器选项 /ORDER(按顺序放置函数) 按指定顺序将封装函数放在 .exe 文件中。

如果内联函数实例化为调用(例如,当关闭内联或获取函数地址时出现这种情况),则始终打包内联函数。另外,在类声明内部定义的 C++ 成员函数会自动打包;其他函数不会如此,所以需要选择此选项以便将它们作为封装函数编译。

 

假设有一个库(lib):
void f1(){}
void f2(){}
你的程序中使用到 f1
使用 /Gy
f1被链接到程序中,因为允许编译器以封装函数 (COMDAT) 的形式将各个函数打包,所以f2可以不被链接进去
如果使用 /Gy-
f1和f2都被链接到程序中

/Gy 的好处就是可以方便移除没有被引用的函数

你可能感兴趣的:(VC)