官术网_书友最值得收藏!

1.3 什么是性能分析

你有過與同事就某一段代碼的性能爭論的經歷嗎?如果有過,那你肯定了解預測哪部分代碼表現最優是一件多么困難的事。現代處理器中有非常多的變化組件,即使代碼層面很小的改動都可能引發顯著的性能變化。這就是為何本書給大家的第一個建議是:一定要測量。

個人經驗 我看到不少人依賴直覺來優化應用程序,他們通常在這里或那里進行隨機的修復,最后卻對應用程序性能沒有任何實質性的影響。

經驗不豐富的開發者經常修改代碼,希望提升性能。例如,設想i的前一個值不會被使用,從而把i++替換成++i。這種改變通常沒有任何實質效果,因為每一個合格的編譯器都能識別出i的前一個值沒有被使用,并且無論如何都會去除冗余的數據。

許多過去廣泛流傳的有效優化小技巧,已經被現代編譯器學會了。此外,有些人會過度使用傳統的位處理技巧,其中一個例子是使用基于XOR的變量交換,但實際上,簡單的std::swap就能產生更快的代碼。這些隨機修改可能并不會提升應用程序的性能,正確找到需要修改的位置需要進行仔細的性能分析,而不是依靠直覺和猜測。

業界有許多性能分析方法論[12],但它們并不是總能幫助你找到方向。本書中介紹的專門針對CPU的性能分析方法有一個共同點:它們都需要收集程序運行的某些信息。程序源代碼中的任何修改,都是根據對收集到的數據進行分析得出的。

定位性能瓶頸只是工程師工作的一半,而另一半工作是用合理的方法解決它。有時,改變一行程序源代碼就會顯著地提升程序性能。性能分析和性能優化就在于找到這一行代碼并進行修改!

主站蜘蛛池模板: 天台县| 虞城县| 山丹县| 穆棱市| 盐边县| 天长市| 湖北省| 黄龙县| 安阳县| 琼中| 淅川县| 察隅县| 中宁县| 安达市| 翁牛特旗| 台前县| 沙坪坝区| 巴楚县| 收藏| 梨树县| 常州市| 当涂县| 永登县| 海南省| 佛冈县| 金湖县| 仪征市| 松阳县| 定西市| 六枝特区| 平顶山市| 敦化市| 托里县| 耒阳市| 卓资县| 邵东县| 拉孜县| 墨竹工卡县| 萍乡市| 文山县| 嵊泗县|