我的名字叫戴維德·福蒂蒂(Davide Faconti),我的工作是世界上最好的工作之一:我從事機器人技術。
這個博客/存儲庫維持在我的業餘時間,與我在那裡的工作無關。因此,意見(和模因)都是我的,並不以任何方式代表我的雇主。
我喜歡C ++編程和開源,這本“日記”是我對OSS社區的小貢獻。
在C ++中優化代碼是沒有人可以抗拒的。您可以玩得開心,並假裝自己正在為組織做一些有用的事情!
在此存儲庫中,我將記錄一些簡單的設計模式,以改善您的代碼,並在C ++中刪除不必要的開銷。
如果您是經驗豐富的C ++專家,那麼您可能已經擁有自己的一套規則。
這些規則可幫助您看起來像是一位不良的屁股/搖滾明星/10X工程師。
您是那種隨便掉下std :: vector <> ::保留在循環和點頭,微笑著,研究績效提高和您的團隊成員驚訝的人。

希望該存儲庫中的示例能夠幫助您實現上師的地位,並且作為副作用,可以使地球免於全球變暖,從而使無用的CPU週期免於浪費。
然後,不幸的是,地球另一端的某人將開始開採比特幣或在Python中寫下她/他的申請,而您為省電而付出的所有努力都是什麼。
我在開玩笑,Python開發人員,我們愛您!
敘述者:“他不是在開玩笑……”
任何關注績效的人應該做的第一件事是:
我和我的同事幾乎總是錯誤的,因為代碼很慢的原因。
有時我們是對的,但是很難事先知道重構如何改善性能。良好的分析工具在幾分鐘內顯示出“低懸掛果”:最低工作,最大收益!
總結:10分鐘分析可以節省您數小時的猜測和重構。
我在Linux中的“ goto”工具是熱點和堆。我知道Windows也有類似的工具。

在基準戰爭中,如果您是士兵,那麼這些是您的步槍和手榴彈。
一旦您知道該代碼的哪一部分應該得到優化,則可能需要使用Google基準測量在非常特定的類或功能中所花費的時間。
您甚至可以在此處在線運行Google Benchmark:Quick-bench.com。

寫出好的代碼就像刷牙一樣:您應該在不考慮太多的情況下做到這一點。
這是您需要訓練的肌肉,隨著時間的流逝,它會變得更強壯。但是請放心:一旦開始,您將開始看到出令人驚訝的簡單模式,並且在許多不同的用例中起作用。
劇透警報:我最受歡迎的技巧之一是最大程度地減少堆的數量。您不知道有多大幫助。
但是,讓我們絕對清楚一點:
換句話說,在執行代碼上的任何更改之前,三思而後行,這會使它不太可讀或難以調試,只是因為您認為它可能會快2.5%。
要獲得更舒適的閱讀體驗,請訪問:https://cpp-optimizatization.netlify.app
默認情況下使用const參考。
移動語義(todo)。
返回值優化(todo)。
使用std :: vector <> ::默認儲備
“我已經學會了大學的鏈接列表,我應該使用它們嗎?” NOOOPE。
為此,您不需要std::map<> 。
小矢量優化
字符串是(幾乎)向量
當不用擔心時:小字符串優化。
字符串串聯: operator+的錯誤安全感。
std::string_view :一見鍾情(todo)。
示例:2D/3D以正確的方式轉換。
在2D矩陣上迭代:不優雅,表現更多。
boost::container::flat_map 。您不會想像接下來發生了什麼。更簡單,更快的方法來過濾PCL中的點雲。
快速回文:有條件分支的成本
這項工作是根據CC BY-SA 4.0許可的