C++Builder 11.3 64位程序远大于32位是否正常?原因何在?
64位C++Builder编译程序体积过大问题排查
我使用C++Builder 11.3(FireDAC/SQLite)开发应用,32位版本编译后体积约为18MB,而64位版本达350MB。
已做的编译配置:
- 32位和64位编译均禁用运行时包链接:
Packages -> Runtime packages -> Link with runtime packages: [ ] false - Release配置禁用动态RTL链接,Debug配置启用,但修改该设置并未改变程序体积:
- Release配置(所有平台):
Building -> C++ linker -> Link with dynamic RTL[ ] false - Debug配置(所有平台):
Building -> C++ linker -> Link with dynamic RTL [x] true
- Release配置(所有平台):
尝试过优化以生成最小体积代码,但仅使体积略有减小。
请问是什么原因导致64位版本体积过大?这种情况是否正常?
64位Release版本map文件内容
Start Length Name Class 0001:00401000 000BAB270H _TEXT CODE 0002:00FAD000 000754A70H _RODATA RODATA 0003:01702000 0000614D0H _DATA DATA 0004:017634D0 000049870H _BSS BSS 0005:00000000 000000BB0H _TLS TLS 0006:017AE000 013FD46CCH _PDATA PDATA 0007:15783000 000183620H _XDATA XDATA 0008:15907000 000000000H _DEBUG_ARANGES DEBUG_ARANGES 0009:15907000 000000000H _DEBUG_MACINFO DEBUG_MACINFO 0010:15907000 000000000H _DEBUG_PUBTYPES DEBUG_PUBTYPES 0011:15907000 000000000H _DEBUG_INFO DEBUG_INFO 0012:15907000 000000000H _DEBUG_ABBREV DEBUG_ABBREV 0013:15907000 000000000H _DEBUG_LINE DEBUG_LINE 0014:15907000 000000000H _DEBUG_ADDR DEBUG_ADDR 0015:15907000 000000000H _DEBUG_STR DEBUG_STR 0016:15907000 000000000H _DEBUG_LOC DEBUG_LOC 0017:15907000 000000000H _DEBUG_RANGES DEBUG_RANGES
32位Release版本map文件内容
Start Length Name Class 0001:00401000 000B8DA00H _TEXT CODE 0002:00F8F000 0001D5FB0H _DATA DATA 0003:01164FB0 00002B43CH _BSS BSS 0004:00000000 000000534H _TLS TLS
补充说明
查看文件偏移量0x17AE000处的内容,发现大量重复的表格数据,占据了程序的大部分体积:
17A:DFC0h: –^.€—^.<«G.–^. 90 96 5E 00 80 97 5E 00 3C AB 47 15 90 96 5E 00 17A:DFD0h: €—^.<«G.–^.€—^. 80 97 5E 00 3C AB 47 15 90 96 5E 00 80 97 5E 00 17A:DFE0h: <«G.–^.€—^.<«G. 3C AB 47 15 90 96 5E 00 80 97 5E 00 3C AB 47 15 17A:DFF0h: –^.€—^.<«G.–^. 90 96 5E 00 80 97 5E 00 3C AB 47 15 90 96 5E 00 17A:E000h: €—^.<«G.–^.€—^. 80 97 5E 00 3C AB 47 15 90 96 5E 00 80 97 5E 00 17A:E010h: <«G.–^.€—^.<«G. 3C AB 47 15 90 96 5E 00 80 97 5E 00 3C AB 47 15 17A:E020h: –^.€—^.<«G.–^. 90 96 5E 00 80 97 5E 00 3C AB 47 15 90 96 5E 00 17A:E030h: €—^.<«G.–^.€—^. 80 97 5E 00 3C AB 47 15 90 96 5E 00 80 97 5E 00 17A:E040h: <«G.–^.€—^.<«G. 3C AB 47 15 90 96 5E 00 80 97 5E 00 3C AB 47 15 17A:E050h: –^.€—^.<«G.–^. 90 96 5E 00 80 97 5E 00 3C AB 47 15 90 96 5E 00
内容的提问来源于stack exchange,提问作者user3161924
相关产品推荐
相关产品推荐

