freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

算法合集之論反匯編在時間常數優(yōu)化中的應用(編輯修改稿)

2024-11-12 20:35 本頁面
 

【文章內容簡介】 ase模式下,任何函數會被優(yōu)先嘗試作為 inline函數,所以在代碼中顯式指定 inline關鍵字仍然沒有實際的作用。 a++。 0040105B add eax,1 swap(a,b)。 0040105E mov dword ptr [esp+8],eax a*=b。 printf(%d%d\n,a,i)。 return 0。 00401062 imul eax,ecx 測試 void swap(intamp。a,intamp。b){int t=a。 a=b。 b=t。} 盡管沒有 inline關鍵字,在反匯編中已經看不到對swap的調用了 ?正因為這樣,在 Debug模式和Release模式下, stl庫的運行效率才會有巨大的差別。 二、除法(求余)的優(yōu)化 (預備 ) ? 預備知識: ? 求余運算 c=a%b等效于 c=aa/b*b但是,其內部實現(xiàn)直接使用除法的第二個返回值: a%=b。 00411B53 mov eax,dword ptr [a] 00411B56 cdq 00411B57 idiv eax,dword ptr [b] 00411B5A mov dword ptr [a],edx ? 除法指令 idiv是一種比例時間很大的指令。編譯器的設計者也知道這一點。所以大多數情況下編譯器都能將常數除法轉化為快得多的位運算。 (注:編譯器同樣也會把特定的乘法轉化為位運算,比如乘以2等) 二、除法(求余)的優(yōu)化 ? 比如,對于 a/=2( a為 32位整數)這句語句在Debug模式下的解釋: a/=2。 00411B4F mov eax,dword ptr [a] 00411B52 cdq 00411B53 sub eax,edx 00411B55 sar eax,1 00411B57 mov dword ptr [a],eax ? 這相對于執(zhí)行 idiv操作要快很多。但是,乘除法需要額外的特殊情況判斷,如正負數、溢出等。這在代碼中直接反映為冗余的匯編代碼。所以,如果運算直接可用位運算代替,推薦使用位運算。 但是,編譯器的智能有很大的局限 ?,比如在變量除變量時,編譯器根本無法判斷變量的特殊性,以至于編譯器直接將語句翻譯為 div(idiv)操作。這樣,如果除數有著特殊性,潛在的性能優(yōu)化就沒有被用到。 二、除法(求余)的優(yōu)化 正確的方法是, 判斷出特殊性, 使用手工的優(yōu)化方式, 如: 優(yōu)化后的代碼: const a[]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096}。 c=bamp。(a[i]1)。 d=e(i1)。 原始代碼: const a[]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096}。 c=b%a[i]。 d=e/a[i]。 二、除法(求余)的優(yōu)化 ? 由于計算機內存是線性的,多維數組的元素在排列為線性序列后存入存儲器,如下所示: 0,0 0,1 0,2 0,3 1,0 1,1 1,2
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1