我将一些项目从vs2010移植到vs2017,但我遇到了一个非常奇怪的行为:使用vs2017构建的dll大小远远大于vs2010: 4.636 Kb vs 595 kb(发布版本)!!!!!
我做的是:
我使用dumpbin来尝试理解某些东西,我发现初始化数据的大小更大(十六进制值):
422600 size of initialized data VS2017
28200 size of initialized data VS2010
任何想法为什么差异以及如何纠正? TIA
答案 0 :(得分:0)
我发现了问题:
vs2010 c ++编译器与vs2017有不同的行为,即使使用相同的优化编译器选项,编译器也更喜欢初始化静态数据。
我使用了一个boost :: lockfree类,spsc_queue,你可以在编译时指定无锁队列的最大值(固定大小)。
boost::lockfree::spsc_queue<DBG_Data*, boost::lockfree::capacity<1024*1024> > _ringQueue;
使用相同的编译器选项,vs 2017会产生一个巨大的dll。 将优化选项从/ O2(速度)更改为/ O1(大小)仅适用于包含该行的源,我将dll大小减小到正常值。