能力值:
( LV2,RANK:10 )
|
-
-
2 楼
没人来看么..
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
自己顶一下 ..
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
汗,lz对这么一个strlen函数问了至少三个帖子了。
这是vc优化出来的一个strlen函数,都是这样写的:
lea edi, xxx ; 字符串首地址
or ecx, FFFFFFFF ;ecx存放字符串长度,初始化为-1
xor eax, eax ;al清零
repne scas byte ptr es:[edi] ;开始扫描,遇到0结束
not ecx
dec ecx ;得到字符串长度
中间夹杂了一些其它指令,是编译器对程序进行优化时使用了交叉代码的方法,可以提高程序的运行效率,例如xor eax,eax之后紧跟repne scab的话,需要等到前一条指令执行完才能执行下一条指令(貌似这被称为数据相关,记不清了),会造成填不满cpu的流水线,影响了cpu的工作效率,中间加进去一个add esp,1C就不用等待了,可以保持流水线一直被填满,不让cpu空闲。
ok,就到这里了。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
支持楼主支持楼主
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
谢了 讲的很清楚了
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
嗯,讲得不错了。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
谢谢学习中!
|
|
|