我的目标是减少现有Visual Studio 2013
C ++项目的二进制大小。
根据我之前的半相关question的理解,如果使用代码,Linker
将包含二进制文件中的代码片段,仅。< / p>
作为我尝试识别项目中哪些组件(类/文件夹/过滤器)最大的一部分,我尝试了以下内容:
我希望2
在二进制大小方面提供与1
相同的结果。
然而,发现使用2
对尺寸的影响更大,意味着尺寸减小要好得多。
2
给出的结果与1
相同)?似乎Linker
仍然包含未使用函数的代码,好像它的逻辑告诉它它不能排除这些函数,因为它们可能以某种方式使用(例如:导出函数)
提醒一下,我想要排除的功能/类不会被导出。
示例1
void func(HINSTANCE, LPVOID lpReserved)
{
// do nothing
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
// do nothing
}
生成大小约为300KB的DLL
示例2
void func(HINSTANCE, LPVOID lpReserved)
{
// do something huge
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved)
{
// do nothing
}
生成大小约为400KB的DLL
生成DLL时,如果未使用/调用函数且未导出函数,为什么链接器会包含其代码?
我根据Do unused functions get optimized out?
配置了Linker
个标记