问个C++编译器优化代码的问题

srhouyu 2011-05-24 09:57:42
例如这样一个程序
struct A { int x, y, z; };
struct B { float x, y, z; };
A aaa;
B bbb;
int main() {
aaa.x = 1;
return 0;
}
虽然声明了两个struct和对应的变量,但是main中只引用了其中的一个。

问题:
那么经过编译优化以后,struct B和变量bbb的代码还会出现在最终的EXE中吗?
如果还include了非常大规模的库,编译器能排除那些从未被main直接或间接引用的代码吗?
...全文
99 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
giant1st 2011-05-24
  • 打赏
  • 举报
回复
GCC 是有设置级别的,如果有没有使用的已定义的变量时会产生warning,然后编译失败。。。
srhouyu 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jackyjkchen 的回复:]

引用 4 楼 srhouyu 的回复:
有点搞不懂了,我现在在研究QT,但是QT程序静态链接就有体积过大的问题。不知道这是为什么。

http://www.qtcn.org/bbs/read.php?tid=43429

是不是我不编译那些静态库,只include纯源代码,才能获得优化?

非也,你要是直接链接源代码,你会发现,qt会让你引用上百个cpp文件才罢休。

qt本身……
[/Quote]

看来对于QT,编译器已经尽力优化了,但是仍然体积很大无法避免。

多谢啦
jackyjkchen 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 srhouyu 的回复:]
有点搞不懂了,我现在在研究QT,但是QT程序静态链接就有体积过大的问题。不知道这是为什么。

http://www.qtcn.org/bbs/read.php?tid=43429

是不是我不编译那些静态库,只include纯源代码,才能获得优化?
[/Quote]
非也,你要是直接链接源代码,你会发现,qt会让你引用上百个cpp文件才罢休。

qt本身那套框架就太大了。

我做过实验,静态库和源代码,生成的可执行文件体积差不多的
就想叫yoko 2011-05-24
  • 打赏
  • 举报
回复
学习下~~~~~~
srhouyu 2011-05-24
  • 打赏
  • 举报
回复
有点搞不懂了,我现在在研究QT,但是QT程序静态链接就有体积过大的问题。不知道这是为什么。

http://www.qtcn.org/bbs/read.php?tid=43429

是不是我不编译那些静态库,只include纯源代码,才能获得优化?
jackyjkchen 2011-05-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 beckhanyan 的回复:]
1,应该是不出现吧。。
2,只要没有全局变量,include再多也无所谓,编译器只连接需要的函数。。。
[/Quote]
全局变量没有引用的,照样给你删干净……
beckhanyan 2011-05-24
  • 打赏
  • 举报
回复
1,应该是不出现吧。。
2,只要没有全局变量,include再多也无所谓,编译器只连接需要的函数。。。
jackyjkchen 2011-05-24
  • 打赏
  • 举报
回复
会清除的,这是很基本的优化,我们用VC和gcc能编译出600字节的hello world,你想想光是源代码中引用的windows.h或者stdio.h、以及那些kernel32.lib,msvcrt.lib之类的库就不只600字节吧

64,682

社区成员

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

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