c++ - 我的 Dll 大小因引入大型 switch case 而过大,如何减小 Dll 大小(MSVC C++)?

标签 c++ visual-c++ optimization case switch-statement

我的 Dll 大小为 2 MB。现在我遇到一种情况,我需要添加一个带有 2500 个箱臂的开关箱。每个箱子都调用一个函数。因此,通过这个包含 2500 个 case 的 switch case,总共调用了 2500 个不同的函数。 (2500 个函数的全部代码已经存在于 2MB 的 DLL 中。包含的额外代码仅是 switch cases)。现在我的问题是 Dll 的大小在发布版本中增加了 15 MB,导致 DLL 大小变为 17 MB,这根据我的要求是巨大的。请建议我一些方法,通过正确处理 switch 情况,我可以将我的 Dll 大小保持在最小值..任何替代方法..
我正在使用 MSVC 2005,c/c++。我调用了优化以最小化大小 (/01)、/ltcg、(/OPT:REF)、(/OPT:ICF) 等所有可能的最佳优化功能。 (不使用预编译头文件)

非常需要您的建议

提前致谢 阿尼尔

最佳答案

如果所有函数都具有相同的签名,请考虑使用函数指针填充 map 或类似的数据结构,并将您打开的内容作为查找键。没有人能够理解包含 2500 种情况的 switch 语句,因此我建议您不要在代码中使用这种语句。

关于c++ - 我的 Dll 大小因引入大型 switch case 而过大,如何减小 Dll 大小(MSVC C++)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4992412/

相关文章:

c++ - 比使用 s.str().c_str() 更好的表达?

c++ - 使用 vtkGenericDataObjectReader 读入 .vtk 二进制文件

c++ - 在 Visual Studio 2015 解决方案中实现 C++ 模板的正确方法是什么?

c++ - 我如何优化此代码以这种格式打印?

c++ - C/C++编译器反馈优化

c - 比特范围内的减法

c++ - 我应该始终为数字类型使用适当的文字吗?

c++ - 代码块调试器不停止

c++ - 错误 LNK2005 : _DllMain@12 already defined in MSVCRT. 库

c++ - 如何创建两个模板版本以获取数组开始和结束(使用 T* 和 It)而不重复代码?