免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 0521
打印 上一主题 下一主题

a++, 是不是从理论上就不可能是一条汇编语句? [复制链接]

论坛徽章:
0
31 [报告]
发表于 2007-08-14 10:43 |只看该作者
原帖由 jamesr 于 2007-8-14 10:41 发表
反正在RISC上是不能直接内存加的。一定要load到reg然后addiu reg,reg,1,然后store回内存。
至于a++这个到底怎么样,要看具体情况。


难道我跟 ARM 和 Intel 搞到一起了?哈哈

论坛徽章:
0
32 [报告]
发表于 2007-08-14 11:14 |只看该作者
在以前玩TurboC的时代,a++ ,++a, a=a+1,可是有讲究,现在编译器优化功能很强,好象很少提这个问题了,不是一条指令问题,而是INC 与ADD的指令周期不一样,还有现在的书都不提了的讲法,就寄存器变量,在老C程序员很讲究,用寄存器变量++a是一条指令,a++要先将数据送到加法寄存器上用INC指令(单周期指令),而a=a+1是用ADD,ADD不是单周期指令,所以CPU机时长点。
   现在CPU上都成单周期指令,CPU时间是不是一样的?如果编译器优化了,应该差不多了,普通变量即少还是有数据传送指令吧。

论坛徽章:
0
33 [报告]
发表于 2007-08-14 11:22 |只看该作者
如果一定要保证原子操作那么考虑写asm,如果是否原子操作不重要,那么这个问题无所谓。
so,a++是不是一条指令无关紧要。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
34 [报告]
发表于 2007-08-14 11:22 |只看该作者
原帖由 bluster 于 2007-8-14 11:22 发表
如果一定要保证原子操作那么考虑写asm,如果是否原子操作不重要,那么这个问题无所谓。
so,a++是不是一条指令无关紧要。

赞!假定 a++ 是一条指令或者不是一条指令都是错误的。

论坛徽章:
0
35 [报告]
发表于 2007-08-14 12:11 |只看该作者
写ASM也不能保证原子操作(SMP上)

原帖由 bluster 于 2007-8-14 11:22 发表
如果一定要保证原子操作那么考虑写asm,如果是否原子操作不重要,那么这个问题无所谓。
so,a++是不是一条指令无关紧要。

论坛徽章:
0
36 [报告]
发表于 2007-08-14 12:20 |只看该作者
a++和++a

完成的任务是: 读取 & 更新. 这个操作既要更新a的值, 还要返回对应的值. 这种操作, 原子化可能性基本不现实吧??

论坛徽章:
0
37 [报告]
发表于 2007-08-14 12:25 |只看该作者
原帖由 Edengundam 于 2007/8/14 12:20 发表
a++和++a

完成的任务是: 读取 & 更新. 这个操作既要更新a的值, 还要返回对应的值. 这种操作, 原子化可能性基本不现实吧??


当然能原子化实现!在X86中,有专门的xchg系列指令,就是为了原子化准备的。
完成:比较并交换的功能。看看X86的汇编就知道了。

论坛徽章:
0
38 [报告]
发表于 2007-08-14 12:27 |只看该作者
原帖由 Edengundam 于 2007-8-14 12:20 发表
a++和++a

完成的任务是: 读取 & 更新. 这个操作既要更新a的值, 还要返回对应的值. 这种操作, 原子化可能性基本不现实吧??

就是个比方,不能asm也可以加锁,反正另外处理呗。
BTW 486+的cpu有xadd指令不知道能不能满足要求

论坛徽章:
0
39 [报告]
发表于 2007-08-14 12:27 |只看该作者
是LOCK指令吧(?)

原帖由 SuperZ 于 2007-8-14 12:25 发表


当然能原子化实现!在X86中,有专门的xchg系列指令,就是为了原子化准备的。
完成:比较并交换的功能。看看X86的汇编就知道了。

论坛徽章:
0
40 [报告]
发表于 2007-08-14 12:28 |只看该作者
参看 glib 中 gatomic.c 有各种平台上原子 加,比较,交换。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP