| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 564 人关注过本帖, 1 人收藏
标题:怎么样可以减小C语言执行文件大小
只看楼主 加入收藏
a284673661
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-6-6
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:7 
怎么样可以减小C语言执行文件大小
在MS-DOS系统下,内存是很宝贵的,用C语言写的程序,怎么样可以让生成的执行文件最小,我发现如下一种情况,大家帮我分析一下:
#include <stdio.h>
main ()
{
    double i;
    i=3/1;
}
如上代码生成执行文件20.0KB
#include <stdio.h>
main ()
{
    int i;
    i=3/1;
}
如上代码生成执行文件3.98KB
问什么会有这么大的差别? 求大神,求专家,求神级人物!!!!!!
搜索更多相关主题的帖子: include 执行文件 double C语言 
2014-03-24 15:47
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:4 
现在研究这个有点本末倒置吧!
另:文件的大小和硬盘有关和内存无关吧
   现在还有在16位D0s下写代码的吗?

DO IT YOURSELF !
2014-03-24 16:48
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:4 
double导致浮点运算库打开了。

做C51编程的时候就有个原则:用尽量少的变量类型。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2014-03-24 17:29
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
另外,如果你想研究这方面的问题的话,当然,只是基于“如果”你想深究的话……

建议你了解一下这些C的指令对应的汇编指令是什么,到那个时候你就恍然大悟了。

曾经我碰到这样一个问题:i++;和i=i+1;哪个的运行速度快?

其实就是看它们哪个对应的汇编指令少……


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2014-03-24 17:33
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:4 
1.使用浮點數需要鏈接浮點庫(視機器有沒有浮點恊處理器及編譯參數是否指示使用它而定),其實printf()版本的hello,world程序尺寸比puts()或putchar()版本的大,看看就知道了。
2.程序運行時佔用的內存並不僅僅由自身尺寸而定,還與程序動態申請資源的情況有關,病毒的自身代碼特短,但卻可以耗盡全部資源。
3.C指令雖然近似與彙編指令等效(幾乎一條對應一條),但彙編指令的執行效率也不是僅看條數的,是由指令本身的功能決定的,同樣一條指令,涉及I/O的就比簡單加法耗時得多,不能那麽膚淺地理解效率。代碼很短的一個循環程序,循環一百萬次,不會比一個寫一百萬行不循環同樣功能的程序快,因爲前者要做循環終結判斷,而後者不用,前者的尺寸小,後者的尺寸大,不是指令少的就快。

其實在當今CPU頻率最低都有1G的時代,無論多龐大的程序,實際上瞬間執行完畢,哪用像遠古時代那樣斤斤計較幾個CPU週期。耗時主要是循環和空等待、I/O、異步協調等原因造成的。在DOS環境,用C寫出.EXE尺寸超過300K的程序,已經很了不起了,無需杞人憂天,除非你的可用內存真的緊張到以幾十個K來計較的程度(以前人家到這程度的解決辦法也是使用EMS或XMS內存而不是刻意去縮小自身尺寸),640K的DOS環境下到這種境地,必定是你駐留了太多雜七雜八程序的原因,屬於系統使用習慣不良的問題。

[ 本帖最后由 TonyDeng 于 2014-3-25 00:38 编辑 ]

授人以渔,不授人以鱼。
2014-03-24 23:56
xkwy0000
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:107
专家分:441
注 册:2013-2-8
收藏
得分:4 
  现在的通用计算机的两个工作环境:dos环境主要用于学习,理论;
保护环境用于商业,应用,市场。在这方面是有定位的。
  很显然要想改变c语言程序的编译效果,除了使用更好的版本之外,
最直接有效的方法就是开发一个c语言编译器,这在保护环境下几乎
是不可能的。
  保护环境下,拥有庞大的空间,32位及更高的指令等等,开发出来
的程序效率一点都不比dos下差,二者兼得么?现在么?
2014-03-25 09:46
xkwy0000
Rank: 6Rank: 6
等 级:贵宾
威 望:11
帖 子:107
专家分:441
注 册:2013-2-8
收藏
得分:0 
  纠正一下,在保护环境下,开发c语言编译器也没有什么额外的困难,
应该是说没有什么意义,只是编译出来的程序,也不会具有dos下程序
的全部特点,而那些现有的编译器的好用是值得赞一个的。
2014-03-25 10:07
风絮满城
Rank: 1
来 自:哈尔滨工业大学
等 级:新手上路
帖 子:6
专家分:6
注 册:2014-3-24
收藏
得分:4 
标准C语言库中,函数Printf的使用给生成的执行文件的长度增加2k字节左右。但由于Printf函数使用起来是非常方便用户的,所以一般不会弃之不用的。但对于时间和日期函数的使用与否,对执行文件长度有很大的影响,因为它们同时引人了额外的函数,所以如果避免使用它们的话,可以使生成的执行文件代码减小。 一般在程序中调用时间和日期函数的格式如下: #inelude(time.h) #inelode(stdio.h) time_tt; t=t ime(NULL), printf(etime(t)),运行程序后将显示如下信息: Wednesda丫,Februarx12,1992 3:41:36.63Pm文后所附的程序也能完成同样功能,但执行文件代码长度将大大减小!
2014-03-25 16:31
快速回复:怎么样可以减小C语言执行文件大小
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021462 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved