go語言通過記憶體快取加快程式執行速度

2021-08-22 16:22:48 字數 1274 閱讀 1211

我們以經典的遞迴求斐波那契數列為例,眾所周知,遞迴是比較消耗記憶體的,且效率比較低,我們通過普通方法和加入記憶體快取的方法作對比。

先來看看普通方法。

package main

import

("fmt"

"time"

)func

fibonacci

(a int

)(result int

)//開始遞迴,前乙個數加後乙個數,一直呼叫,直到出口為止

result=

fibonacci

(a-1)+

fibonacci

(a-2

)return

}func

main()

經我這台渣渣筆記本測試,此方法求第45位所需時間為7.1s

2018.11月更新

上面的**已經過時了,最近又學了一招,通過加記憶體快取的方法實現快速遞迴求斐波那契數列。

這種方法避免了重複計算,經測試,可以將上面的**速度提公升四千倍左右。不多說,直接上**。

package main

import

("fmt"

"time"

)const lim =

45var fibs [lim]

uint64

func

fibonacci

(n int

)(res uint64

)if n <=

1else

//計算完畢,加入快取中,以備下次之需

fibs[n]

= res

return

}func

main()

end := time.

now(

) delta := end.

sub(start)

fmt.

printf

("longcalculation took this amount of time: %s\n"

, delta)

}

經我這台渣渣電腦測試,求第45位數列的值所用時間約等於0.

可見速率提公升了不是一點點。

總結

記憶體快取的技術在使用計算成本相對昂貴的函式時非常有用(不僅限於例子中的遞迴),譬如大量進行相同引數的運算。這種技術還可以應用於純函式中,

即相同輸入必定獲得相同輸出的函式。

一些加快 程式執行速度的方法

程式的執行時間是各位oier最頭疼的限制之一,只要你運用如下演算法,相信程式的執行時間會有巨大的改觀 pragma gcc optimize 2 把這一句話放到程式的最開頭即可實現 考慮到部分題目的n或m較大,相對應的n行m列的讀入規模就會非常大,一般來說,用scanf流比cin流更快一些 因為ci...

通過推理加快計算機視覺應用的執行速度

推理引擎要求將該模型轉化成 ir 中間 檔案。本教程將詳細介紹如何使用 model optimizer 提取現有模型 googlenet 並將其轉化成 ir 中間 檔案。推理引擎提取神經網路模型的表示並對其進行優化,以在 cpu 中充分利用高階英特爾 指令集,並使其相容其他硬體加速器 gpu 和 f...

使用Map作為快取,提公升程式執行速度

最近在工作的過程中,新學到了使用hashmap作為程式的快取,感覺很棒,特此記錄下來 private string getbudgetagencyname string budgetagencycode,mapbudgetagencymap,string sysyear,string sysmont...