首页
社区
课程
招聘
[疑问]栈的存取速度快吗?
发表于: 2006-11-29 16:08 3585

[疑问]栈的存取速度快吗?

2006-11-29 16:08
3585
栈是在内存中读写数据
但是CPU也可以单独的读写任意内存地址
那有栈和没有栈有什么区别呢
以前我听朋友说内存中会有很多栈
最近看书感觉栈只应该有一个啊
总感觉栈和用DS读写数据有什么区别

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
2
栈也可以理解为内存读写。

你同样可以使用MOV指令来对堆栈中的数据进行读写操作

差别在于栈操作的CPU指令是经过特殊优化的。

AMD技术手册里面有个附录,有所有指令运行所需要的时钟周期

mov reg32,mem32和mov mem32,reg32都需要3个时钟周期

pushad/popad都需要6个时钟周期

movq mmreg,mem64和movq mem64,mmreg都需要2个时钟周期(这是MMX指令,针对大量数据处理而优化的)

好了,现在来说说差别。

pushad将EAX ECX EDX EBX ESP EBP ESI EDI全部写进堆栈,一共是256位的数据,只需要6个时钟周期

用MOV MEM32,REG32向内存中写256位的数据需要24个时钟周期

如果用MMX指令MOVQ,则需要8个始终周期

性能上的差别,这就是为什么使用堆栈保存一些局部变量而不使用内存(一般用作保存全局变量)的原因了。

只要修改ESP,那么对应的内存便可以认为是堆栈了。当然被用作堆栈的内存需要设置相应的页面属性
2006-11-29 17:26
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
3
栈比寄存器慢,但比一般的内存地址快一些
2006-11-29 18:32
0
游客
登录 | 注册 方可回帖
返回
//