C 語言中 memcpy 和循環(huán)賦值的優(yōu)化探究
對于 C 語言來說,編譯器會將 memcpy 和循環(huán)賦值都優(yōu)化成幾條匯編指令,因此它們生成的代碼效率相同。教科書中大多數(shù)討論的是在「無編譯器優(yōu)化」的情況下,這種情況并不適用于大多數(shù)場景。實際上,標準庫的 memcpy 函數(shù)一定會開啟優(yōu)化,而你自己的代碼可能沒有開啟優(yōu)化。因此,在優(yōu)化到位的情況下,memcpy 和循環(huán)賦值都會生成相同的代碼,效率都是 SIMD 級別(即一次復制多條數(shù)據(jù))。因此,個人建議使用 memcpy 函數(shù),因為明確的函數(shù)調(diào)用可以使你的代碼意圖更明確,程序可讀性更高。
就像在編寫 C++ 時,我會盡量推薦使用 #include <algorithm> 中的通用算法一樣。盡管有時你可能認為沒有必要調(diào)用這些通用算法,自己手寫也完全沒有問題,但是調(diào)用這些通用算法的代碼本身就是最好的注釋,后來的開發(fā)人員可以清晰地理解這段代碼想要實現(xiàn)的功能。畢竟,通用算法的語義是公共知識,是共識,而不是需要閱讀這個特定程序才能理解的東西。
剛好,我這里有C語言資料包,私信我領(lǐng)取