设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
编程开发讨论区 —— LinuxSir.cn
›
C\C++
›
请版主再看看我跟进的关于 gcc -O2 的信息 ...
返回列表
查看:
1072
|
回复:
7
请版主再看看我跟进的关于 gcc -O2 的信息
[复制链接]
hoho_zhao
hoho_zhao
当前离线
积分
289
IP卡
狗仔卡
发表于 2006-11-24 22:37:44
|
显示全部楼层
|
阅读模式
再谢!
若用 int a;
加入 while(a) {printf("abc");}
则 gcc -o test test.c 和 gcc -O2 -o test test.c
都可以通过 Control + c 来改变 a 值来跳出 while循环
若 while(a){}
或
int i;
while(a){i++;}
都不行!
就是在 while中加入 printf语句或“更复杂”一些的语句才在 -O2下 Contro + c 成功
唉。。。。。不明不白。。。。。
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
khc
khc
当前离线
积分
116
IP卡
狗仔卡
发表于 2006-11-25 06:23:26
|
显示全部楼层
gcc 不知道 printf 會不會把 int a 的內容改掉,當然不能把 while(a) 優化成 while(1)
回复
支持
反对
使用道具
举报
显身卡
hoho_zhao
hoho_zhao
当前离线
积分
289
IP卡
狗仔卡
楼主
|
发表于 2006-11-25 10:15:40
|
显示全部楼层
gcc 不知道 printf 會不會把 int a 的內容改掉,當然不能把 while(a) 優化成 while(1)
不是很明白你说的,你可以先看看我之前的一帖,那里有完整的一个程序:(谢谢)
“求助!超级恐怖!用gcc -O2 选项编译 while(int a){} 出现“死机” ”
回复
支持
反对
使用道具
举报
显身卡
khc
khc
当前离线
积分
116
IP卡
狗仔卡
发表于 2006-11-25 10:30:52
|
显示全部楼层
gcc 會把 while(a) 優化成 while(1) 是因為 gcc 覺得 a 不會被改變,如果在 while loop 以內用 printf 的話,因為 a 是 global 而 gcc 不知道 printf 會不會把 a 改成其他 value, 所以便不能用這個 optimization.
當然,也有可能 gcc 不是把 while(a) 優化成 while(1), 而只是把 a 放進 register,但原理差不多,所以如果你用 volatile 的話就能解決你的問題。
回复
支持
反对
使用道具
举报
显身卡
hoho_zhao
hoho_zhao
当前离线
积分
289
IP卡
狗仔卡
楼主
|
发表于 2006-11-25 17:09:16
|
显示全部楼层
谢谢 khc 兄的指导!!!
我想问一下,printf 在什么情况下会改变 a 的值呢? 它只不过是一个标准输出函数罢了。
回复
支持
反对
使用道具
举报
显身卡
rickxbx
rickxbx
当前离线
积分
1256
IP卡
狗仔卡
发表于 2006-11-25 18:38:42
|
显示全部楼层
我们用眼睛当然能够看出printf不会修改 a, 可是编译器如何得知 printf 只是一个标准输出函数, 而不是某个会修改 a 的函数呢? 为了简单起见, 编译器不会再跟进 printf 函数看个究竟, 只是假设 a 可能被修改, 这种假设是合理的, 因为如若不这样, 那么编译器要多做多少事情啊. 静态分析做不到也不需要做到把每个 call 都实际走一遍, 那其实已经是动态分析了
回复
支持
反对
使用道具
举报
显身卡
hoho_zhao
hoho_zhao
当前离线
积分
289
IP卡
狗仔卡
楼主
|
发表于 2006-11-25 22:08:48
|
显示全部楼层
看了 rickxbx 的跟帖:
如浴春风!!!!!!!
回复
支持
反对
使用道具
举报
显身卡
million
million
当前离线
积分
274
IP卡
狗仔卡
发表于 2006-11-25 23:55:41
|
显示全部楼层
-S 看汇编
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表