青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數(shù)據(jù)加載中……

指針訪問與數(shù)組訪問的效率分析

 

http://blog.csdn.net/pony_maggie/article/details/6748662

 

總看到網(wǎng)上一些人說指針訪問比數(shù)組訪問效率高, 但很少人解釋其中的原理, 這篇文章從匯編級別上分析一下原因.


我用一個"reverse"函數(shù)來作為例子, 分別用指針和數(shù)組的形式來實現(xiàn)這個函數(shù).

view plain

  1. //指針訪問 
  2. void reverse(char *pStr,int nLen) 
  3.  char *pStart=pStr;//指向字符串開始 
  4.  char *pEnd=pStr+nLen-1;//指向字符串結(jié)尾 
  5.  char chTmp; 
  6.   
  7.  while(pEnd > pStart) 
  8. {  
  9.   chTmp = *pStart; 
  10.   *pStart = *pEnd; 
  11.   *pEnd = chTmp; 
  12.    
  13.   pStart++; 
  14.   pEnd--; 



這是上面的函數(shù)在vc6下的反匯編代碼,我加了一些注釋方便理解

view plain

  1. 19:   void reverse(char *pStr,int nLen) 
  2. 20:   { 
  3. 00401070   push        ebp 
  4. 00401071   mov         ebp,esp 
  5. 00401073   sub         esp,4Ch 
  6. 00401076   push        ebx 
  7. 00401077   push        esi 
  8. 00401078   push        edi 
  9. 00401079   lea         edi,[ebp-4Ch] 
  10. 0040107C   mov         ecx,13h 
  11. 00401081   mov         eax,0CCCCCCCCh 
  12. 00401086   rep stos    dword ptr [edi]//調(diào)用子函數(shù)時進(jìn)堆棧保存信息.  
  13.  
  14. 00401088   mov         eax,dword ptr [ebp+8] 
  15. 0040108B   mov         dword ptr [ebp-4],eax//char *pStart=pStr; 
  16.  
  17. 0040108E   mov         ecx,dword ptr [ebp+0Ch] 
  18. 00401091   mov         edx,dword ptr [ebp+8] 
  19. 00401094   lea         eax,[edx+ecx-1] 
  20. 00401098   mov         dword ptr [ebp-8],eax//char *pEnd=pStr+nLen-1; 
  21.     
  22. 0040109B   mov         ecx,dword ptr [ebp-8] 
  23. 0040109E   cmp         ecx,dword ptr [ebp-4]//while(pEnd > pStart) 
  24. 004010A1   jbe         reverse+61h (004010d1) 
  25.        
  26. 004010A3   mov         edx,dword ptr [ebp-4]//chTmp = *pStart; 
  27. 004010A6   mov         al,byte ptr [edx]//取一個字節(jié) 
  28. 004010A8   mov         byte ptr [ebp-0Ch],al 
  29.      
  30. 004010AB   mov         ecx,dword ptr [ebp-4]//*pStart = *pEnd; 
  31. 004010AE   mov         edx,dword ptr [ebp-8] 
  32. 004010B1   mov         al,byte ptr [edx]//pEnd中取一個字節(jié) 
  33. 004010B3   mov         byte ptr [ecx],al 
  34.          
  35. 004010B5   mov         ecx,dword ptr [ebp-8]// *pEnd = chTmp; 
  36. 004010B8   mov         dl,byte ptr [ebp-0Ch] 
  37. 004010BB   mov         byte ptr [ecx],dl 
  38.           
  39. 004010BD   mov         eax,dword ptr [ebp-4]//pStart++; 
  40. 004010C0   add         eax,1 
  41. 004010C3   mov         dword ptr [ebp-4],eax 
  42.            
  43. 004010C6   mov         ecx,dword ptr [ebp-8]//pEnd--; 
  44. 004010C9   sub         ecx,1 
  45. 004010CC   mov         dword ptr [ebp-8],ecx 


 

view plain

  1. //數(shù)組訪問 
  2. void reverse(char *pStr,int nLen) 
  3.  int i = 0; 
  4.  int j = nLen-1; 
  5.  char chTmp; 
  6.   
  7.  while(j>i) 
  8. {  
  9.   chTmp=pStr[i]; 
  10.   pStr[i]=pStr[j]; 
  11.   pStr[j]=chTmp; 
  12.    
  13.   i++; 
  14.   j--;     


 

這是上面代碼的反匯編

view plain

  1. 19:   void reverse(char *pStr,int nLen) 
  2. 20:   { 
  3. 004010D0   push        ebp 
  4. 004010D1   mov         ebp,esp 
  5. 004010D3   sub         esp,4Ch 
  6. 004010D6   push        ebx 
  7. 004010D7   push        esi 
  8. 004010D8   push        edi 
  9. 004010D9   lea         edi,[ebp-4Ch] 
  10. 004010DC   mov         ecx,13h 
  11. 004010E1   mov         eax,0CCCCCCCCh 
  12. 004010E6   rep stos    dword ptr [edi] 
  13.  
  14. 004010E8   mov         dword ptr [ebp-4],0 
  15.  
  16. 004010EF   mov         eax,dword ptr [ebp+0Ch] 
  17. 004010F2   sub         eax,1 
  18. 004010F5   mov         dword ptr [ebp-8],eax 
  19.   
  20. 004010F8   mov         ecx,dword ptr [ebp-8] 
  21. 004010FB   cmp         ecx,dword ptr [ebp-4] 
  22. 004010FE   jle         reverse+6Ah (0040113a
  23.      
  24. 00401100   mov         edx,dword ptr [ebp+8] 
  25. 00401103   add         edx,dword ptr [ebp-4]//注意這里 
  26. 00401106   mov         al,byte ptr [edx] 
  27. 00401108   mov         byte ptr [ebp-0Ch],al 
  28.  
  29. 0040110B   mov         ecx,dword ptr [ebp+8] 
  30. 0040110E   add         ecx,dword ptr [ebp-4]//注意這里 
  31. 00401111   mov         edx,dword ptr [ebp+8] 
  32. 00401114   add         edx,dword ptr [ebp-8]//注意這里 
  33. 00401117   mov         al,byte ptr [edx] 
  34. 00401119   mov         byte ptr [ecx],al 
  35.  
  36. 0040111B   mov         ecx,dword ptr [ebp+8] 
  37. 0040111E   add         ecx,dword ptr [ebp-8]//注意這里 
  38. 00401121   mov         dl,byte ptr [ebp-0Ch] 
  39. 00401124   mov         byte ptr [ecx],dl 
  40.  
  41. 00401126   mov         eax,dword ptr [ebp-4] 
  42. 00401129   add         eax,1 
  43. 0040112C   mov         dword ptr [ebp-4],eax 
  44.  
  45. 0040112F   mov         ecx,dword ptr [ebp-8] 
  46. 00401132   sub         ecx,1 
  47. 00401135   mov         dword ptr [ebp-8],ecx 


兩個函數(shù)反匯編后的代碼基本是一致的,但第二段匯編中多了幾個add語句, 這是因為在用數(shù)組下標(biāo)的形式訪問字符串時,總要對數(shù)組的首地址做加減操作才能定位到想要的值, 而指針的實現(xiàn)則一開始就copy了一個首地址,不需要再用加減來定位.顯然在這個例子中,用指針來實現(xiàn)reverse函數(shù)效率要高.

 

posted on 2011-09-07 18:06 肥仔 閱讀(1701) 評論(2)  編輯 收藏 引用 所屬分類: C++ 基礎(chǔ)

評論

# re: 指針訪問與數(shù)組訪問的效率分析  回復(fù)  更多評論   

效率高不假 但指針自增自減會帶來更多的錯誤 還有可能覆蓋了系統(tǒng)重要內(nèi)存
2011-11-28 09:30 | jemmyLiu

# re: 指針訪問與數(shù)組訪問的效率分析[未登錄]  回復(fù)  更多評論   

喲西 。
2013-02-15 21:52 | mengjiangtao
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美午夜一区二区| 久久精品99国产精品| 亚洲欧美在线一区二区| 欧美成人免费va影院高清| 久久精品人人做人人爽| 欧美亚洲网站| 欧美一区二区精品在线| 欧美在线视频导航| 久久精品夜夜夜夜久久| 久久久亚洲一区| 久久综合免费视频影院| 91久久精品日日躁夜夜躁国产| 久久riav二区三区| 欧美黄色aaaa| 亚洲欧美变态国产另类| 久久久午夜视频| 国产精品国产三级国产aⅴ无密码| 国产精品久久一卡二卡| 亚洲国产清纯| 久久久噜噜噜久久中文字幕色伊伊 | 久久久精品999| 男人的天堂亚洲| 亚洲综合色噜噜狠狠| 欧美日韩免费| 亚洲精品久久嫩草网站秘色 | 国产精品久久九九| 亚洲激情中文1区| 久久中文字幕一区| 欧美在线视频a| 国产专区欧美精品| 久久亚裔精品欧美| 欧美资源在线观看| 韩日成人在线| 久久久久久夜| 欧美一区二区三区在线观看| 欧美性猛交视频| 亚洲性图久久| 亚洲自拍另类| 在线看欧美视频| 亚洲第一中文字幕| 99精品免费| 91久久综合| 国产精品综合不卡av| 午夜精彩国产免费不卡不顿大片| 亚洲视频在线观看三级| 国产美女诱惑一区二区| 免费亚洲一区二区| 欧美大片在线看免费观看| 一区二区三区视频在线看| 欧美性色视频在线| 久久夜色精品国产噜噜av| 欧美国产日韩精品免费观看| 在线亚洲国产精品网站| 午夜精品99久久免费| 亚洲欧美日韩系列| 91久久精品美女高潮| 亚洲永久字幕| 亚洲精品日韩欧美| 欧美主播一区二区三区美女 久久精品人 | 欧美国产日韩视频| 欧美亚州一区二区三区| 久久亚洲免费| 国产视频在线观看一区二区三区| 亚洲精品国产视频| 亚洲欧美国产日韩中文字幕| 亚洲国产成人在线播放| 久久国产精品72免费观看| 亚洲免费网站| 久久av一区二区| 国产午夜精品理论片a级大结局| 一区二区欧美激情| 亚洲一区二区三区免费视频| 欧美电影免费观看高清| 亚洲黑丝在线| 亚洲午夜久久久久久久久电影网| 欧美成人一区二区三区| 亚洲二区三区四区| 中文在线一区| 国产一在线精品一区在线观看| 午夜国产不卡在线观看视频| 久久久久国产成人精品亚洲午夜| 国产亚洲在线观看| 欧美va亚洲va香蕉在线| 亚洲国产欧美日韩另类综合| 夜夜嗨av一区二区三区中文字幕| 欧美日韩午夜| 性色av一区二区三区在线观看| 美女视频黄 久久| 久久中文字幕导航| 亚洲精品一区在线观看香蕉| 午夜国产一区| 亚洲九九爱视频| 国产视频一区在线| 欧美日韩中文字幕在线| 久久久夜色精品亚洲| 一区二区三区.www| 亚洲高清影视| 狼人天天伊人久久| 亚洲午夜精品一区二区| 在线观看一区二区精品视频| 国产精品久久久久一区| 欧美成va人片在线观看| 欧美在线视频免费观看| 亚洲午夜在线观看| 一本色道久久综合亚洲精品不| 久久久www成人免费精品| 亚洲影院高清在线| 一本大道av伊人久久综合| 亚洲另类春色国产| 亚洲青涩在线| 日韩一区二区精品| 夜夜狂射影院欧美极品| 在线视频精品一区| 亚洲免费一区二区| 久久国内精品自在自线400部| 亚洲视频在线观看三级| 亚洲欧美欧美一区二区三区| 亚洲亚洲精品在线观看 | 亚洲电影av| 欧美福利视频在线观看| 牛夜精品久久久久久久99黑人 | 日韩视频不卡| 亚洲在线免费观看| 国产精品一区二区三区成人| 欧美极品一区二区三区| 欧美午夜精品久久久久久超碰| 国产精品第三页| 国产综合婷婷| 亚洲香蕉伊综合在人在线视看| 亚洲欧美国产精品va在线观看| 久久精品国产清自在天天线| 久久午夜精品| 亚洲图片欧美午夜| 国产精品美女主播| 亚洲欧美综合| 麻豆精品在线播放| 久久综合久久88| 国产亚洲综合性久久久影院| 久久国产精品一区二区三区| 久久精品亚洲精品国产欧美kt∨| 黄色成人91| 亚洲激情网站免费观看| 欧美日韩国产欧| 久久婷婷国产综合尤物精品| 麻豆精品传媒视频| 午夜一区二区三视频在线观看| 久久精品91| 一本色道久久综合狠狠躁篇的优点 | 亚洲国产91色在线| 欧美一区二区视频网站| 亚洲深夜福利视频| 国产精品福利久久久| 亚洲一区二区三区在线播放| 91久久国产精品91久久性色| 欧美14一18处毛片| 亚洲欧洲偷拍精品| 亚洲美女在线看| 国产精品美女xx| 久久九九久精品国产免费直播| 亚洲欧美中日韩| 亚洲人精品午夜在线观看| 夜夜嗨av色一区二区不卡| 国产精品久久久久aaaa| 久久久久成人精品免费播放动漫| 亚洲日本免费| 亚洲精品美女久久7777777| 欧美日韩在线播放一区二区| 久久精品91久久久久久再现| 欧美mv日韩mv国产网站| 亚洲欧美日韩精品在线| 免费美女久久99| 久久免费精品视频| 国产精品国产自产拍高清av| 久久久综合网站| 国产精品久久久久久久午夜| 久久夜色精品国产欧美乱| 欧美日韩一区在线观看| 欧美激情一区二区在线| 国产精品日产欧美久久久久| 欧美第一黄网免费网站| 国产在线精品一区二区夜色| 99国产精品久久久久老师| 亚洲精品美女在线观看播放| 久久婷婷丁香| 牛牛影视久久网| 久久嫩草精品久久久久| 久久在线91| 欧美一级视频免费在线观看| 国产精品永久免费观看| 牛牛国产精品| 中文欧美字幕免费| 欧美成人高清视频| 亚洲视频1区2区| 国产日本欧美一区二区三区在线 | 欧美日韩三级视频| 亚洲一线二线三线久久久| 裸体歌舞表演一区二区| 日韩午夜免费| 极品少妇一区二区| 国产精品免费一区豆花|