主题:VC++编译的程序体积太大
tanchuhan
[专家分:15140] 发布于 2006-09-07 16:00:00
为什么用VC++写一个没有任何功能的WIN32窗体程序,编译后的体积有600多KB,但我用MASM写一个同样的程序却只有3KB左右,我用DASM分别反汇编它们,发现VC++写的程序引用了许多我并没有用到的API,多出了许多代码,而MASM写的则很简洁,没有任何多余的代码(写DLL也一样).
还有,我想知道Windows中的系统工具是用什么语言写的(例如Notepad),我曾反汇编过它们,好像不是用VC++写的,看起来很像MASM写的,不知道你们认为怎样?
我对VC++不是很熟,谢谢回答!
回复列表 (共12个回复)
沙发
aaronwang [专家分:16870] 发布于 2006-09-07 16:09:00
奇了,我写了些代码也才200多KB(DEBGU)版式.RELEASE的才100多一点点.
如果你想把C++的代码与汇编的代码比较体积.
那不如把拿大象与牛比重量.
板凳
tanchuhan [专家分:15140] 发布于 2006-09-07 16:11:00
那也有200多KB啊!是不是太大了?而且"引用了许多我并没有用到的API"又是怎么回事?还有Notepad是用什么语言写的?
3 楼
2002041072 [专家分:2030] 发布于 2006-09-07 16:36:00
200多KB会大么,对于目前的存储技术来说,时间往往重要过空间。
你用MASM写个DLL和用VC写个DLL哪个来得更快些?
WINDOWS操作系统是用C语言和少量汇编写的,你说Notepad是用什么写的
4 楼
tanchuhan [专家分:15140] 发布于 2006-09-07 17:31:00
那Notepad是用什么编译器写的,应该不是VC++6.0吧?如果Notepad是用某种高级语言编译器写的,我一定转用那种编译器,因为作为高级语言,它的代码竟然可以达到MASM的水平,太厉害了。
5 楼
2002041072 [专家分:2030] 发布于 2006-09-07 17:41:00
Notepad是操作系统的一部分,当然也是用C语言写的
现在也有许多人用高级语言来写比Notepad功能稍强的记事本
代码的优劣主要不是看其编译出来文件的大小,而是看它的执行效率
6 楼
2002041072 [专家分:2030] 发布于 2006-09-07 17:44:00
WINDOWS操作系统之所以大部分代码是用C语言编写其主要原因是C语言灵活,用起来方便,极其少数用汇编语言写的都是系统瓶颈部分。
7 楼
2002041072 [专家分:2030] 发布于 2006-09-07 17:46:00
C,C++语言虽然是高级语言,可它们却开放了许多底层的API函数给用户使用,效率高,现在许多单片机开发都用它们
8 楼
tanchuhan [专家分:15140] 发布于 2006-11-19 09:15:00
[quote]Notepad是操作系统的一部分,当然也是用C语言写的
现在也有许多人用高级语言来写比Notepad功能稍强的记事本
代码的优劣主要不是看其编译出来文件的大小,而是看它的执行效率
[/quote]
那为什么我用C++6写的软件编码质量比系统Notepad的编码质量差这么多?Notepad的每条指令都是必须,而C++写的却多了许多冗余的指令。
你试下自己用C++写个和Notepad类似功能的软件,再反汇编,比较它们的代码,你就会明白我的意思了。
9 楼
xacker [专家分:570] 发布于 2009-06-10 23:56:00
说的到是有鼻子有脸的 可惜 只是一群外行 呵呵
连VC最基本的常识都不了解....
至于 LZ你的MFC程序为什么那么大?
因为你用的是VC向导下生成的MFC程序 MFC封装了所有的WINDOWS消息 还提供了很多高级的类
整个程序的内部处理流程基本都在MFC里 所以才有你一句消息处理代码不写 就生成的界面
然后 直接按默认的生成 没有优化去掉一些不用的类 所以 600K 一点不奇怪
至于你所说的NOTEPAD 是C写的
C语言用WIN32 API写的 也可以说是SDK写的
因为 没有用MFC 所以程序体积比较小
10 楼
tanchuhan [专家分:15140] 发布于 2009-07-05 00:21:00
[quote]说的到是有鼻子有脸的 可惜 只是一群外行 呵呵
连VC最基本的常识都不了解....
至于 LZ你的MFC程序为什么那么大?
因为你用的是VC向导下生成的MFC程序 MFC封装了所有的WINDOWS消息 还提供了很多高级的类
整个程序的内部处理流程基本都在MFC里 所以才有你一句消息处理代码不写 就生成的界面
然后 直接按默认的生成 没有优化去掉一些不用的类 所以 600K 一点不奇怪
至于你所说的NOTEPAD 是C写的
C语言用WIN32 API写的 也可以说是SDK写的
因为 没有用MFC 所以程序体积比较小[/quote]
很久没上论坛了,刚看到你的回复.
1 俺当年没用MFC
2 俺没说"一句消息处理代码不写 就生成的界面"
3 "C语言用WIN32 API写的 也可以说是SDK写的" - 莫名其妙
4 Notepad小是因为他动态链接msvcrt.dll
我来回复