Nama saya Davide Faconti dan pekerjaan saya adalah salah satu yang terbaik di dunia: Saya bekerja dalam robotika .
Blog/repositori ini dipertahankan di waktu luang saya dan tidak terkait dengan pekerjaan saya di sana. Oleh karena itu pendapat (dan meme) semuanya milik saya dan tidak mewakili majikan saya dengan cara apa pun .
Saya suka pemrograman C ++ dan open source dan "buku harian" ini adalah kontribusi kecil saya untuk komunitas OSS.
Mengoptimalkan kode dalam C ++ adalah sesuatu yang tidak bisa ditolak oleh siapa pun. Anda dapat bersenang -senang dan berpura -pura bahwa Anda melakukan sesuatu yang berguna untuk organisasi Anda secara bersamaan!
Dalam repositori ini, saya akan merekam beberapa pola desain sederhana untuk meningkatkan kode Anda dan menghapus overhead yang tidak perlu di C ++ .
Jika Anda seorang ahli C ++ berpengalaman, Anda mungkin sudah memiliki aturan sendiri.
Aturan-aturan ini membantu Anda terlihat seperti insinyur bad-ass/rockstar/10x untuk kolega Anda.
Anda adalah tipe orang yang dengan santai menjatuhkan std :: vektor <> :: cadangan sebelum satu lingkaran dan mengangguk, tersenyum, melihat peningkatan kinerja dan keheranan anggota tim Anda.

Mudah -mudahan, contoh -contoh dalam repositori ini akan membantu Anda mencapai status Guru ini dan, sebagai efek samping, menyelamatkan planet ini dari pemanasan global, menghemat siklus CPU yang tidak berguna agar tidak terbuang.
Kemudian, sayangnya, seseorang di sisi lain planet ini akan mulai menambang bitcoin atau menulis lamarannya di Python dan semua upaya Anda untuk menghemat listrik adalah tanpa hasil.
Saya bercanda, pengembang Python, kami mencintaimu!
Narator: "Dia tidak bercanda ..."
Hal pertama yang harus dilakukan oleh siapa pun tentang kinerja adalah:
Saya dan kolega saya hampir selalu salah tentang alasan sepotong kode lambat.
Terkadang kita benar, tetapi sangat sulit untuk mengetahui sebelumnya bagaimana refactoring akan meningkatkan kinerja. Alat profil yang bagus menunjukkan dalam beberapa menit "buah -buahan gantung rendah": pekerjaan minimum, manfaat maksimal!
Ringkas: Profiling 10 menit dapat menghemat waktu menebak dan refactoring.
Alat "goto" saya di Linux adalah hotspot dan heaptrack. Saya mengerti Windows memiliki alat yang sama juga.

Dalam perang patokan, jika Anda adalah prajurit, ini adalah senapan dan granat tangan Anda.
Setelah Anda mengetahui bagian mana dari kode yang layak untuk dioptimalkan, Anda mungkin ingin menggunakan Google Benchmark untuk mengukur waktu yang dihabiskan di kelas atau fungsi yang sangat spesifik.
Anda bahkan dapat menjalankannya Google Benchmark Online di sini: Quick-Bench.com.

Menulis kode yang baik seperti menyikat gigi: Anda harus melakukannya tanpa terlalu memikirkannya.
Ini adalah otot yang perlu Anda latih, yang akan menjadi lebih kuat dari waktu ke waktu. Tapi jangan khawatir: begitu Anda mulai, Anda akan mulai melihat pola berulang yang secara mengejutkan sederhana dan berfungsi dalam banyak kasus penggunaan yang berbeda.
Peringatan Spoiler : Salah satu trik yang paling saya cintai adalah meminimalkan jumlah alokasi tumpukan . Anda tidak tahu seberapa banyak membantu.
Tapi mari kita buat sesuatu yang benar -benar jelas:
Dengan kata lain, pikirkan dua kali sebelum melakukan perubahan dalam kode Anda yang membuatnya kurang mudah dibaca atau lebih sulit untuk debug, hanya karena Anda yakin itu dapat berjalan 2,5% lebih cepat.
Untuk pengalaman membaca yang lebih nyaman, kunjungi: https://cpp-optimizations.netlify.app
Gunakan referensi const secara default.
Pindahkan Semantic (Todo).
Pengoptimalan Nilai Pengembalian (TODO).
Gunakan std :: vektor <> :: cadangan secara default
"Saya telah belajar daftar tertaut di universitas, haruskah saya menggunakannya?" NOOOPE.
Anda tidak perlu std::map<> untuk itu.
Optimalisasi Vektor Kecil
String adalah vektor (hampir)
Saat tidak perlu khawatir: optimasi string kecil.
Gabungan String: Rasa Keamanan operator+ .
std::string_view : love at first sight (todo).
Contoh: 2D/3D mengubah cara yang benar.
Iterasi di atas matriks 2D: kurang elegan, lebih banyak pertunjukan.
boost::container::flat_map . Anda tidak akan membayangkan apa yang terjadi selanjutnya.Cara yang lebih sederhana dan lebih cepat untuk memfilter awan titik di PCL.
Palindrome cepat: Biaya cabang bersyarat
Pekerjaan ini dilisensikan di bawah CC BY-SA 4.0