标题: [原创]djgpp与ms compile比较
[打印本页]
作者: bobo98
时间: 2008-1-7 22:37
标题: [原创]djgpp与ms compile比较
本文仅在2 编译器产生的文件大小方面。
分别用这2 款编译器对同一C文件编译后,结果如下:
编译器 djgpp vs2005
文件大小(byte) 79926 53248
其中:
djgpp: gcc4.22, djdev203, bnu217
vs2005: SP1
环境:Win2003 cmd
测试C文件
#include <stdio.h>
int main(void)
{
char a[] = "Hello, world!";
char *week[] = { "sun", "mon", "tue",
"wed", "thu", "fri", "sat" };
int i;
printf("%s\n", a);
for(i=0; i<7; i++)
{
printf("%s ", week[i]);
}
printf("\n");
return 0;
}
编译指令:
djgpp: gcc -Wall -O2 -o test6.exe test6.c
Vs2005: cl -Wall -O2 test7.c
作者: bush
时间: 2008-1-7 23:52
想要說明什麽呢? 從生成文件大小決定編譯器優劣?
你貼得代碼少了一個[i]
作者: bush
时间: 2008-1-8 00:09
不好意思,剛才在命令行模式下看帖,顯示不正常,代碼沒問題。
我手上有從VC6中提取的 CL編譯器 拿來編譯你的文件作比較:
CL test.c
文件大小: 28672 byte
作者: bush
时间: 2008-1-8 00:15
标题: 再來比較WACTOM
Open Watcom Version 1.7
wcl test.c (我用的是16位程序)
文件大小:8746 byte
作者: bobo98
时间: 2008-1-8 09:40
由于djgpp是32位模式,所以没有贴上16位的
在tc 2.0下
test8.com 1760 bytes
test8.exe 2328 bytes
上传文件满了,传不上这2 个.
[
Last edited by bobo98 on 2008-1-8 at 09:49 AM ]
作者: bobo98
时间: 2008-1-16 17:19
好象大家对编辑器不是很关心哈.
例如,在DOS下:
1. 内存空间
2. 存储空间
都可能是你要关心的问题.
当然并不是讲GNU开发器不好,只是它要在多平台上使用,估计有些
并容性造成文件大点.
欢迎更多的人提出看法...
作者: zyl910
时间: 2008-1-16 18:38
vs2005编译出来的是哪种?
A.DOS下的exe程序
B.Windows下的控制台程序
我怀疑是B
作者: bobo98
时间: 2008-1-16 19:16
确实是B.
作者: bobo98
时间: 2008-1-16 19:18
对了Djgpp也是B,如果加上了DIPM2个都能运行了.
作者: bush
时间: 2008-1-18 00:55
還有一些純C編譯器,據說在某些場合也比那些C/C++兼容的編譯器做得好
就是不知道有沒有人測試過
作者: Wengier
时间: 2008-1-18 09:12
Quote: |
Originally posted by bobo98 at 2008-1-16 07:18 PM:
对了Djgpp也是B,如果加上了DIPM2个都能运行了. |
|
DJGPP不是B。32位DOS DPMI程序和WIN控制台程序是不一样的。
作者: bobo98
时间: 2008-1-18 16:31
不错,站长的加入为主题带更精彩的讨论。
我从理论上感觉,它们2者应该是一样的,但是从实际上就象
Wengier所说它们2者是不同的。
对GNU DPMI来说:通过int 2fh(1687h)找到入口进入,而且我
看到的这个DPMI V0.9指南中提到把32位程序当16位进行.进入
后得得到的段限仅64K,同real dos一样.
Windows NT下的控制台,把后台工作全做好,通过我的小程序测试
能达到32位的模式.程序附后.我的内存有1G,限制在1.5G,测试到
1.8G多点时,崩溃.那位有DPMI环境的,可以用它测试后,报告一下
结果.
// 测试程序
// 测试近似从1.1M开始
#include <stdio.h>
#include <stdlib.h>
void PrintMsg(char*, int);
int main(void)
{
char *buf;
int base = 1024, i = 1100;
while(1)
{
buf = (char*)malloc(base * i);
if(buf == 0)
{
printf("Memory crach!\n");
return -1;
}
PrintMsg(buf, i);
free(buf);
i += 16; // test memory crach by para
}
return 0;
}
void PrintMsg(char* buf, int i)
{
sprintf(buf, "Test memory in %dK", i);
printf("%s\n", buf);
}