免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2326 | 回复: 2
打印 上一主题 下一主题

关于内存寻址和各效率上面的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-11-27 22:11 |只看该作者 |倒序浏览
本帖最后由 canigreen 于 2011-11-28 11:06 编辑

立即寻址、直接寻址、间接寻址
立即寻址:
比如:a=a+5,其中5是立即寻址,这种方式中,数字‘5’要不要在内存中开一个存储空间,再取空间值来和变量a中的数字进行运算?
直接寻址:
a=a+5中,变量a是直接寻址,直接寻址的这个地址就是直接就指向了变量所在的内存空间了,还是要操作系统通过一定量的计算,再找到这变量a在内存中的真实的地址?
间接寻址:
间接寻址中有一个变更专门存放某个变更的内存地址,相对直接寻址方式来说,间接寻址就是把直接寻址中要地址偏移等一些运算一次性的计算完,并且把结果放到这个指针变量中,在以后用到的时候,就不需要再次计算,用此来提高效率?
还有就是各寻址方式在效率上有什么区别?哪个比较快,哪个比较慢?

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
2 [报告]
发表于 2011-11-28 07:54 |只看该作者
这个问题应归于“CPU与编译器”。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
3 [报告]
发表于 2011-11-28 08:55 |只看该作者
立即寻址,立即数编码在指令里,指令取到了操作数也有了。但是如果指令被设计为定长,那就不是什么数都可以作立即数。

直接寻址,操作数在内存里,内存地址编码在指令里。如果是定长指令,能包容的绝对地址有限,一般採用相对于PC的偏移来表示内存地址。

这些概念本来就没有标准定义,看LZ口气应该是在学x86了。那直接寻址就指令中包含绝对地址,间接寻址是说操作数在内存里,但其内存地址在寄存器里,编码在指令里的是寄存器信息。

a = a + 5中的a,编译成汇编后可能的情况是,第一次先用直接寻址将内存中的值放到某个中间寄存器,后续引用a就用直接用寄存器的值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP