回 帖 发 新 帖 刷新版面

主题:VC++编译的程序体积太大

为什么用VC++写一个没有任何功能的WIN32窗体程序,编译后的体积有600多KB,但我用MASM写一个同样的程序却只有3KB左右,我用DASM分别反汇编它们,发现VC++写的程序引用了许多我并没有用到的API,多出了许多代码,而MASM写的则很简洁,没有任何多余的代码(写DLL也一样).

还有,我想知道Windows中的系统工具是用什么语言写的(例如Notepad),我曾反汇编过它们,好像不是用VC++写的,看起来很像MASM写的,不知道你们认为怎样?

我对VC++不是很熟,谢谢回答!

回复列表 (共12个回复)

沙发

奇了,我写了些代码也才200多KB(DEBGU)版式.RELEASE的才100多一点点.
如果你想把C++的代码与汇编的代码比较体积.
那不如把拿大象与牛比重量.

板凳

那也有200多KB啊!是不是太大了?而且"引用了许多我并没有用到的API"又是怎么回事?还有Notepad是用什么语言写的?

3 楼

200多KB会大么,对于目前的存储技术来说,时间往往重要过空间。
你用MASM写个DLL和用VC写个DLL哪个来得更快些?
WINDOWS操作系统是用C语言和少量汇编写的,你说Notepad是用什么写的

4 楼

那Notepad是用什么编译器写的,应该不是VC++6.0吧?如果Notepad是用某种高级语言编译器写的,我一定转用那种编译器,因为作为高级语言,它的代码竟然可以达到MASM的水平,太厉害了。

5 楼

Notepad是操作系统的一部分,当然也是用C语言写的
现在也有许多人用高级语言来写比Notepad功能稍强的记事本
代码的优劣主要不是看其编译出来文件的大小,而是看它的执行效率

6 楼

WINDOWS操作系统之所以大部分代码是用C语言编写其主要原因是C语言灵活,用起来方便,极其少数用汇编语言写的都是系统瓶颈部分。

7 楼

C,C++语言虽然是高级语言,可它们却开放了许多底层的API函数给用户使用,效率高,现在许多单片机开发都用它们

8 楼

[quote]Notepad是操作系统的一部分,当然也是用C语言写的
现在也有许多人用高级语言来写比Notepad功能稍强的记事本
代码的优劣主要不是看其编译出来文件的大小,而是看它的执行效率
[/quote]
那为什么我用C++6写的软件编码质量比系统Notepad的编码质量差这么多?Notepad的每条指令都是必须,而C++写的却多了许多冗余的指令。
你试下自己用C++写个和Notepad类似功能的软件,再反汇编,比较它们的代码,你就会明白我的意思了。

9 楼

说的到是有鼻子有脸的   可惜 只是一群外行   呵呵 

连VC最基本的常识都不了解....  

至于 LZ你的MFC程序为什么那么大?   

因为你用的是VC向导下生成的MFC程序 MFC封装了所有的WINDOWS消息 还提供了很多高级的类
整个程序的内部处理流程基本都在MFC里  所以才有你一句消息处理代码不写 就生成的界面

然后  直接按默认的生成 没有优化去掉一些不用的类 所以 600K  一点不奇怪    


至于你所说的NOTEPAD 是C写的  
C语言用WIN32 API写的  也可以说是SDK写的

因为 没有用MFC  所以程序体积比较小

10 楼

[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

我来回复

您尚未登录,请登录后再回复。点此登录或注册