搜索
查看: 1631|回复: 18
打印 上一主题 下一主题

问一个问题昂

[复制链接]
跳转到指定楼层
楼主
发表于 2016-3-14 18:46:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
8啊哈币
想问问题了。。
两个问题,都答对了,给啊哈必
1.下面这些东西,哪个快哪个慢。。(a是int)
1a++ ++a
21==a a==1
3int a=1; int a;a=1;
4 #define n 3 const int n=3;
5 #define LL long long typedef long long LL;

2.举个栗子,能说明gcc编译通过而g++编译不通过的。(main返回值别说了)

沙发
 楼主| 发表于 2016-3-14 18:51:47 | 只看该作者
ros大神来!
板凳
发表于 2016-3-14 19:29:52 | 只看该作者
一脸茫然
地板
发表于 2016-3-14 19:48:02 | 只看该作者
前三个一样快
第四个语义不同,一个是在预处理期把n替换成3,一个是向编译器承诺不会修改n的值
第五个语义也不同,不过能确定也一样快

2不是很简单吗,最典型的
char *ptr = malloc(10);
5#
发表于 2016-3-14 20:05:26 | 只看该作者
a++再循环结构会多一次! 1==a a==1
6#
发表于 2016-3-14 20:08:32 | 只看该作者
a++再循环结构会多一次! 1==a a==1当然1==a好!int a=1;         int a;a=1;很明显,一个需要一个机器周期,另外一个需要多个机器周期。
7#
发表于 2016-3-14 20:11:33 | 只看该作者
int a; a=1;怎么能编译出两个周期的?

点评

因为是两条指令1;2; 就是从汇编的角度理解.也MOV了两次  发表于 2016-3-14 20:22
因为是两条指令1;2;  发表于 2016-3-14 20:21
8#
发表于 2016-3-14 20:11:44 | 只看该作者
a++再循环结构会多一次! 1==a a==1当然1==a好!int a=1;         int a;a=1;很明显,一个需要一个机器周期,另外一个需要多个机器周期。4,5!define是最快的
9#
发表于 2016-3-14 20:26:44 | 只看该作者
rosynirvana 发表于 2016-3-14 20:11
int a; a=1;怎么能编译出两个周期的?

是两个指令周期,多个机器周期
10#
发表于 2016-3-14 20:27:05 | 只看该作者
栈上分配空间的汇编语句是共用的啊,不管有没有都要给栈分配空间,所以如果认为赋值是一句汇编那int a=1;也是一句……

还有不要用点评,点评没法回复的
11#
发表于 2016-3-14 20:32:48 | 只看该作者
好吧!有点乱。好久没接触这些东西!我乱讲了
12#
 楼主| 发表于 2016-3-14 21:24:31 | 只看该作者
我记得++a比a++快,而且++a返回左值,是因为我之前写过一篇博客
第二个没研究过,根据编程美观我喜欢写a==1
第三个如果int是自己定义的结构体,第一个就是调用构造函数,第二个就是调用operator=函数
第四个和第五个我认为是define快,因为在预处理的时候已经改变了,在运行过程中和原样无二。
13#
 楼主| 发表于 2016-3-14 21:25:09 | 只看该作者
我不明白为什么for中都写for(int i=1;i<=n;i++)而不是++i,而且我现在一直在写i++
14#
发表于 2016-3-14 21:42:18 | 只看该作者
本帖最后由 rosynirvana 于 2016-3-14 21:46 编辑

你们不要认为编译器很傻,同语义的东西换个写法就能编译出运行效率不同的东西出来
更不要把C++和C混在一起讨论,++a比a++快是在C++中a是某个class实例,另外编译器信息受限无法优化时候才成立的
15#
 楼主| 发表于 2016-3-15 12:28:01 | 只看该作者
rosynirvana 发表于 2016-3-14 21:42
你们不要认为编译器很傻,同语义的东西换个写法就能编译出运行效率不同的东西出来
更不要把C++和C混在一起 ...

o_o 编译器这么聪明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表