关于不同的编译器

delphiwcdj 2010-04-06 09:26:48
刚才试了一下,同样的代码debug:CodeBlocks为590KB,而VS为36.5KB。release:CodeBlocks为270KB,而VS为10KB。所有参数都是默认的,没有做任何优化。生成的应用程序的体积怎么会相差怎么大,是什么造成的呢?
...全文
152 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
delphiwcdj 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 jackyjkchen 的回复:]
在不用stl的情况下,老邓教我按1楼的方式优化的,6KB,如果使用一些技巧,可以达到1kb以下
[/Quote]
是在windows下用gcc编译的,选了一些关于size方面的优化选项,但是生成的代码依然很大。可能是stl的原因,在不用stl时又测试了一下,release, vs是7KB,gcc是5.5KB。
jackyjkchen 2010-04-06
  • 打赏
  • 举报
回复
在不用stl的情况下,老邓教我按1楼的方式优化的,6KB,如果使用一些技巧,可以达到1kb以下
独孤过儿 2010-04-06
  • 打赏
  • 举报
回复
windows下你最好别用gcc,就像在linux下你最好别用MS的编译器一样~~
jackyjkchen 2010-04-06
  • 打赏
  • 举报
回复
晕菜,我这里更大,gcc4.4.3,大到1楼的选项也不起作用了,468K,stl的原因
delphiwcdj 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 do_fork 的回复:]
g++编译后是8.8k, 经过strip后是6.2k, 程序输出是个99乘法表
[/Quote]
我选择了一些选项,还是很大,我的是32位的
do_fork 2010-04-06
  • 打赏
  • 举报
回复
Using built-in specs.
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.4.3-4ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.4 --program-suffix=-4.4 --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i486 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)


64位编译器编译出的64位程序,编译成32位程序应该还能缩小一些体积。
do_fork 2010-04-06
  • 打赏
  • 举报
回复
g++编译后是8.8k, 经过strip后是6.2k, 程序输出是个99乘法表
delphiwcdj 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jackyjkchen 的回复:]
C++吧,gcc有个bug,会莫名其妙把异常处理的库链接进去,即便你没用,请使用-fno-exceptions编译选项
[/Quote]
感觉有点儿太大了。
delphiwcdj 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 do_fork 的回复:]
代码贴出来看看,我也编译看看
[/Quote]
随便一小段代码就可以。VS用的是2008

#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
for (int i=1,a=1,b=1,flag =1;i<=81;++i,flag =(i%9!=0),a=i/9+flag*1,b=(flag?i%9:9))
cout<<a<<"*"<<b<<"="<<setw(2)<<a*b<<(flag?" ":"\n");
return 0;
}
某某9 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 do_fork 的回复:]

gcc编译的代码要经过strip才算是去除多余信息的版本
[/Quote]
哦!!
do_fork 2010-04-06
  • 打赏
  • 举报
回复
代码贴出来看看,我也编译看看
delphiwcdj 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jackyjkchen 的回复:]
C++吧,gcc有个bug,会莫名其妙把异常处理的库链接进去,即便你没用,请使用-fno-exceptions编译选项
[/Quote]
debug中就有一个-g选项。看来还要仔细看看manual。
delphiwcdj 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jackyjkchen 的回复:]
引用 2 楼 do_fork 的回复:
gcc编译的代码要经过strip才算是去除多余信息的版本

codeblocks的release是strip过的
[/Quote]
是有的
delphiwcdj 2010-04-06
  • 打赏
  • 举报
回复
在官方下的比较新的codeblocks-8.02mingw-setup.exe版本,但是发现gcc版本很老。
gcc-core-3.4.5-20060117-1-vista.tar.gz
gcc-g++-3.4.5-20060117-1-vista.tar.gz
mingw-runtime-3.14.tar.gz
mingw32-make-3.81-2.tar.gz
mingw-utils-0.3.tar.gz
w32api-3.11.tar.gz
binutils-2.18.50-20080109.tar.gz
gdb-6.7.50.20071127-mingw.tar.bz2
jackyjkchen 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 do_fork 的回复:]
gcc编译的代码要经过strip才算是去除多余信息的版本
[/Quote]
codeblocks的release是strip过的
ljh0703 2010-04-06
  • 打赏
  • 举报
回复
编译器不一样 生成的文件会有查遍的
do_fork 2010-04-06
  • 打赏
  • 举报
回复
gcc编译的代码要经过strip才算是去除多余信息的版本
jackyjkchen 2010-04-06
  • 打赏
  • 举报
回复
C++吧,gcc有个bug,会莫名其妙把异常处理的库链接进去,即便你没用,请使用-fno-exceptions编译选项

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧